最佳答案
                                        
                                                                        
                                编辑:  所以基本上我要写的是 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
 
                                
                             
                                
                            