为什么浮点计算结果在C和我的计算器上有所不同?

时间:2014-05-04 09:01:10

标签: c floating-point-precision

我正在解决一个问题,我的C程序返回的结果不如简单的计算器返回的那样好,精确度不一样精确。 在我的计算器上,当我将2000008除以3时,我得到666669.333333 但在我的C程序中,我得到666669.312500 这就是我正在做的事情 -

printf("%f\n",2000008/(float)3);

为什么结果不同?我该怎么做才能得到与计算器相同的结果?我尝试了double但后来以不同的格式返回结果。我是否需要完成转换?请帮忙。

2 个答案:

答案 0 :(得分:3)

有关详细说明,请参阅http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

简而言之,浮点数是实数的近似值,它们对数字有限制。对于浮动,这个限制非常小,有双倍,但更多,但仍然不完美。

尝试

printf("%20.12lf\n",(double)2000008/(double)3);

你会看到一个更好但仍然不完美的结果。归结为,你永远不应该假设浮点数是准确的。他们不是。

答案 1 :(得分:1)

浮点数占用一定量的内存,因此精度有限。精度有限意味着您无法表示所有可能的实数,而这反过来意味着某些计算会导致舍入误差。使用double代替float可以获得额外的精确度,但请注意,即使double也无法代表所有内容,即使它足以满足大多数实际目的。

Gunthram在答案中总结得非常好:

  

归结为,你永远不应该假设浮点数是准确的。他们不是。

相关问题