2024 年 Clojure 状况调查!中分享您的想法。

欢迎!有关这个网站是如何工作的更多信息,请参阅简介页面。

+1
Java 互操作
重标记

查看下方的gist以查看详细结果。

注意,对我来说使用互操作是没问题。
我在一个运筹学用例中,随机值的消耗时间是重要的。

但我想知道 clojure 为什么不提议一个更好的 rand-int 版本。

我猜(但如果有必要,我会检查)nextInt 版本可能更均匀(统计上更接近理论)。

PS:来自 Slack 通道 clojure 中的一个问题的重复。

2 个答案

+3

被选中
 
最佳答案

为了绝对效率(或者至少不让任何东西落在地上),我认为为rand-int提供一个专门的变体是合理的。我认为这可能是clojure 1.0中的简单实现。这大概简化了通过Math/random的隐式全局随机数生成器统一所有内容。然而,多年来,关于这种方法的不可重现性已经有了一些抱怨;常见的解决方案似乎是将随机实例定义为动态变量,并将调用委托给它,尽管这会带来动态变量的查找开销。但您需要引入一个专门用于rand-int的随机实例(这很简单...只需要闭包一个实例)。

注意,如果您真的关注性能,我在https://dsiutils.di.unimi.it/docs/it/unimi/dsi/util/XoRoShiRo128PlusRandom.html上找到的PRNG比java.util.random快两倍,而且还有更专业的技术,如https://dragan.rocks/articles/19/Billion-random-numbers-blink-eye-Clojure,更进一步(尽管那些例子需要被强制转换为int,可能还需要用一些流式API包装,还需要引入其他依赖)。

0 投票
...