我遇到过这种奇怪的行为,这可能最好用一个小例子来描述:
Random R = new Random();
for (int i = 0; i < 10_000; i++)
{
double d = R.NextDouble() * uint.MaxValue;
}
d现在,小数点前的最后一位数字始终是偶数,即int r = (int) (d % 10)始终是 0、2、4、6 或 8。不过,两边都有奇数位。
我怀疑与uint.MaxValue(2^32 - 1) 相乘可能会在最后一位数字中强制出现一些舍入误差,但由于 double 具有超过 50 位的精度,因此这应该会击败 uint,在分隔符后保留大约 20 位。uint.MaxValue如果我在乘法之前显式存储为双精度值并使用它,也会发生此行为。
有人可以阐明这一点吗?
BIG阳
相关分类