为什么Mathn不运行Math?random()输出0?

时间:2017-04-17 11:34:56

标签: java

我在Java中有一个关于Math.ceil()和Math.random()一起使用的问题,以便将数字从1提取到x。

    int randomNumber;
    do {
        randomNumber = (int) Math.ceil(Math.random() * 1);
        System.out.println("Random number generated was: " + randomNumber);
    }while (randomNumber != 0);

此代码将返回0,如预期的那样 - 0 * 1为0.

FLAGS

那怎么会一直回来1?我无法得到它 - 当访问Math.random()时,它会读取:"将大于或等于的伪随机{@code double}返回到{@code 0.0}并且小于{@code 1.0}"

那应该仍然允许0 * 1的情况。有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:2)

虽然可能 Math.random()可能确切地返回零,但它并非特别可能。因此,循环似乎无限期地运行,尽管在某些时候它最终会终止。

要了解Math.random()可以返回多少双打(即0到1之间有多少双打),请查看this SO answer,估算数字:

  

不包括非正规化& c,我相信计数将是1023倍2 ** 52。

因此,恰好为零的几率约为2^52中的一个。不要屏住呼吸等待这种情况发生。

答案 1 :(得分:0)

这就是javadoc所说的:

  

返回带有正号的double值,大于或等于   0.0且小于1.0。返回值是伪随机选择的,具有来自该范围的(近似)均匀分布。当这个   首先调用方法,它创建一个新的伪随机数   生成器,就像表达式

一样

所以,是的,它会在某个时间点返回0并终止loop。但是,由于它是随机的,当它返回0时很难确定完全,因此,loop可能会在经过几次迭代后终止,或者可能需要一段时间。