【发布时间】:2020-02-12 12:12:57
【问题描述】:
我正在使用Random class's nextDouble() 方法,如下所示。我希望nextDouble() 在区间 [-50.0, 50.0) 上返回一个伪随机的double 值,但是,在循环运行 10 亿次之后,输出会输出到maximum: 49.99999995014588 minimum: -49.99999991024878。我在没有操作输出间隔的情况下运行了循环,得到了maximum: 0.9999999998979311 minimum: 0.0。我觉得这很奇怪,因为我对返回的0.0 所做的只是将其乘以 100.0 并从中减去 50.0。为什么下面这段代码 sn-p 永远不会准确返回 -50.0?
编辑:只是为了好玩,我又运行了 5 亿次循环,现在的输出是:maximum: 49.99999994222232 minimum: -49.999999996750944。
import java.util.Random;
public class randomTest{
public static void main(String[] args) {
double max = 0;
double min = 0;
Random math = new Random();
for(int a = 0; a < 1000000000; a++) {
double rand = math.nextDouble() * 100.0 - (100.0 / 2.0);
max = Math.max(max, rand);
min = Math.min(min, rand);
}
System.out.println("maximum: " + max + " minimum: " + min);
}
}
【问题讨论】: