Как реализовать функцию случайных чисел по системе "все включено" в Clojure? - PullRequest
0 голосов
/ 04 января 2019

Мне было интересно, как включить случайные числа в Clojure. Я придумал это:

(import java.util.Random)

(def rnd 
  (Random.))
(defn random-float 
  [min max rnd] 
  (+ min (* (.nextDouble rnd) (- max min))))

Кажется, что в Java есть только включающие / исключающие случайные функции. По документации:

Общий контракт nextDouble - это выбранное одно двойное значение (приблизительно) равномерно в диапазоне от 0,0d (включительно) до 1,0d (исключая), генерируется и возвращается псевдослучайно.

Есть ли способ получить инклюзивную / инклюзивную версию этой функции. Я думал об увеличении максимального значения чуть-чуть (0,0000000000000001). Не уверен, что будет, если я сделаю это.

Будет ли это работать?

(random-float 0.0 1.0000000000000001 rnd)

1 Ответ

0 голосов
/ 04 января 2019

Насколько важна двойная точность для вашего случая?

Вы можете использовать целые числа для всего с помощью clojure.core rand-int например:

  • для числа от 0 до 100: (rand-int 101)
  • для числа от 0 до 1000: (rand-int 1001)
  • и т.д.

Я бы также отметил, что существуют другие функции в стиле ранжирования Clojure, такие как random-sample и rand; если rand-int не то, что вы ищете, тем не менее вам, вероятно, не понадобится использовать Java.

...