我正在解决一个问题,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/