gpt4 book ai didi

java - Java的随机函数可以为零吗?

转载 作者:太空狗 更新时间:2023-10-29 22:41:47 26 4
gpt4 key购买 nike

出于好奇,Math.random() 可以为零吗?

例如,如果我有:

while (true){
if (Math.random() == 0)
return 1;
}

我真的会得到一个返回吗?还需要考虑舍入误差,因为 Math.random() 返回 double 值。

我问是因为我的 CS 教授说 random() 从 0 到 1 包含,我一直认为它是不包含的。

最佳答案

是的,真的可以。 Math.random()创建全局 java.util.Random -带种子的发电机 (System.currentTimeMillis() ^ 0x5DEECE66DL) & ((1L << 48) - 1)并调用 nextDouble()为了它。如果它的种子达到状态107048004364969L (它会的,因为 java.util.Random 有完整的周期),下一个 double生成的将是 0.0 .尽管运气不好,您可能会在循环中得到错误的奇偶校验,因为 Random.nextDouble()两次提升状态。如果运气不好,您可能必须在循环终止之前生成 2^47 个随机数,因为我没有找到任何其他给出 0.0 的种子。 .

种子的进步好像是seed = (seed * 0x5DEECE66DL + 0xBL) & ((1L << 48) - 1);使用两个连续种子值的 26 位和 27 位高位生成 double 值。在示例中,接下来的两个种子值将为 0L11L .

如果您设法使用 System.currentTimeMillis()==107038380838084L 创建全局生成器,您的代码会立即返回。你可以模拟这个:

java.util.Random k = new java.util.Random(107038380838084L); System.out.println(k.nextDouble()==0);

关于java - Java的随机函数可以为零吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3065554/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com