如何在 Clojure 中实现全包随机数函数



我想知道如何在 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-samplerand;如果rand-int不是你要找的,你可能仍然不需要回退到Java。

最新更新