尽管内部表示有 17 位,但 IEE754(64 位) float 应该正确表示 15 位有效数字。有没有办法强制第 16 位和第 17 位数字为零??
引用: http://msdn.microsoft.com/en-us/library/system.double(VS.80).aspx : . .
请记住, float 只能逼近十进制数,而 float 的精度决定了该数字逼近十进制数的准确程度。默认情况下,Double 值包含 15 个十进制数字的精度,但内部保留了最多 17 个数字。 float 的精度有几个后果: . .
示例编号:
d1 = 97842111437.390091
d2 = 97842111437.390076
d1 和 d2 在小数点后第 16 位和第 17 位不同,这不应该是重要的。寻找将它们强制归零的方法。 IE
d1 = 97842111437.390000
d2 = 97842111437.390000
最佳答案
没有。反例:最接近有理数的两个 float
1.11111111111118
(有 15 位十进制数字)是
1.1111111111111799942818834097124636173248291015625
1.1111111111111802163264883347437717020511627197265625
也就是说,不存在以1.1111111111111800
开头的 float 。
关于c++ - C++ 中的 double 字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1521194/