最佳答案
编辑: 所以基本上我要写的是 double
的1位散列。
我想映射一个 double
到 true
或 false
与一个50/50的机会。为此,我编写了一些代码,选择一些随机数 (作为一个例子,我想把它用在有规律性的数据上,仍然得到一个50/50的结果),检查它们的最后一位,如果是1,则增加 y
,如果是0,则增加 n
。
然而,这段代码不断导致25% 的 y
和75% 的 n
。为什么不是五五分成呢?为什么是这样一个奇怪的,但直接的(1/3)分布?
public class DoubleToBoolean {
@Test
public void test() {
int y = 0;
int n = 0;
Random r = new Random();
for (int i = 0; i < 1000000; i++) {
double randomValue = r.nextDouble();
long lastBit = Double.doubleToLongBits(randomValue) & 1;
if (lastBit == 1) {
y++;
} else {
n++;
}
}
System.out.println(y + " " + n);
}
}
输出示例:
250167 749833