我想知道如何在 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.00000000000000001)增加最大值。不确定如果我这样做会有什么影响。
这行得通吗?
(random-float 0.0 1.0000000000000001 rnd)
双精度对您的情况有多重要?
您可以使用 clojure.core 的所有内容使用整数rand-int
例如:
- 对于 0-100 之间的数字:
(rand-int 101)
- 对于 0-1000 之间的数字:
(rand-int 1001)
- 等
我还要指出,还有其他Clojure rand风格的函数,如random-sample
和rand
;如果rand-int
不是你要找的,你可能仍然不需要回退到Java。