涉及双数的计算

时间:2016-03-02 21:57:22

标签: c++

对于以下代码,为什么cellSide的值不是0.80000000000000000而是0.80000000000000004。

/*****Additional info *******
*#define RADIUS 4
*double cellSide = 0.0  ;
*int iCelleParameter=10;
*****************************/

cellSide = 2 * RADIUS / (double)iCelleParameter;

1 个答案:

答案 0 :(得分:-1)

浮点数和双打数不能完全代表数字,所以有时它们有点偏差。对于货币类型值,它可以工作,因为您可以舍入到最接近的两位数。

例如,如果将值设置为0.1,则可能会说0.0999999999或0.100000000001(我不确定它究竟是什么,只是它会偏离一点点)。这对于花车和双打来说是正常的。

更新:上面已经更新,因为有人指出我的2.0原始示例可以准确表示,但0.1是一个无法准确表示的数字示例。