【发布时间】:2014-02-06 01:00:50
【问题描述】:
我可以将 [Long.MIN_VALUE, Long.MAX_VALUE] 到 [0,1] 之间的整数均匀随机地转换吗?主要目的是让我可以选择一个分数,例如0.1 并选择均匀且随机分布的 10% 多头。如果这个转换方法是f(x),我可以在任意一个long上检查f(x)< 0.1,看它是否属于10%的选定数字。一些重要的要求:
-
它可以通过种子来控制,这样我每次(我想要的时候)都可以得到相同的结果,也可以改变种子以获得完全不同的结果。
-
当我将分数从x增加到y时,我希望x中所有选择的数字也被选择在Y中。例如,如果我选择10%的数字时选择了894230,那么它也应该被选择我选择 20% 的数字。
-
我可以选择不会产生明显模式的种子,例如
double f(x) { return (x%1000)/1000.0; }。很高兴拥有(但不是必需的):
-
我可以使用产生明显模式的虚拟种子(以便在单元测试中看起来很明显)。
我使用 Java,但我不介意用任何可以用 Java 轻松重写的语言来回答
【问题讨论】: