浮动投射将值减少1

Mar*_*cer 3 c++ floating-point casting

当转换(浮动)33554329L时,结果是33554328.如果该数字然后被转换为long,则值保持在33554328,对此有任何解释.

在C++中使用VS2005 [非管理]

sho*_*osh 7

32位浮点数为尾数23位,为8,388,608个不同的值.这意味着精度大约是7位有效小数.您的号码有8位十进制有效数字,因此您可以看到最后一位有效数字的精度损失.
这是关于浮点表示的更多信息

双精度为64位,尾数为52位,即4,503,599,627,370,496(16位数),因此具有大约15-16的十进制数字精度.

decimal类的东西,可能让您保存在任何准确性任意数量的任意长度.C#有它们但不幸的是它们不是C++中的原始类型.您可以找到一些在C++中实现它们的第三方库.


sel*_*bie 5

阅读本文:

"每个计算机科学家都应该了解浮点数"

http://www.validlab.com/goldberg/paper.pdf