Создание большого случайного числа в Racket - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь сгенерировать очень большое случайное число в Racket, что-то между 0 и 1e20.

(random) имеет ограничение, установленное в диапазоне от 1 до 4294967087.

Я создал функцию hack-y, которая пытается генерировать случайное число, но делает это только на основепорядок величины, а не фактическое число.Вот эта функция:

define (l-random [min 0] [max 10])
  (define length (random (number-length min) (number-length max)))
  (define string "")
  (for ([i length])
    (set! string (format "~a~a" string (random 0 10))))
  (string->number string))

А вот как я вычисляю порядок величины:

(define (number-length number)
  (cond [(= 0 number) 1]
        [else (+ 1 (exact-floor (log (abs number) 10)))]))

Есть ли у вас какие-либо предложения или решения?Спасибо!

1 Ответ

0 голосов
/ 29 ноября 2018

Модуль Генерация случайных чисел из научной коллекции содержит именно то, что вы ищете.Вот пример для реплики DrRacket (до 1e20 по вашей спецификации):

Welcome to DrRacket, version 6.3 [3m].
Language: racket; memory limit: 256 MB.

> (require (planet williams/science/random-source))

> (random-integer (expt 10 20))
79219429305569404064

, который работает менее чем за одну секунду!

...