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

标签 c floating-point-precision

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

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

为什么结果不同?我应该怎么做才能得到与计算器相同的结果?我试过 double 但它以不同的格式返回结果。我需要经历转换吗?请帮忙。

最佳答案

参见 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html以获得深入的解释。

简而言之, float 是实数的近似值,并且它们可以容纳的位数是有限的。对于 float,这个限制很小,对于 double,它更多,但仍然不完美。

尝试

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

您会看到更好但仍不完美的结果。归根结底,你永远不应该假设 float 是精确的。他们不是。

关于c - 为什么浮点计算结果在 C 和我的计算器上不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23454401/

相关文章:

c - 将数据读入 C 中的 float 组

C 将文件的一部分读入缓存

c++ - 为什么 cout 的默认精度不影响评估结果?

c++ - 如何克服 double 不准确?

c - Visual Studio 2010 的多精度

c - 如何用C语言创建一个可以实现向上箭头历史捕获的shell?

c - 为什么puts()最后会打印一个额外的字符?

找不到死锁

数字的 C++ 精度和 fstream 的截断

java - 为什么使用双重的for循环无法终止