This question already has answers here:
Is floating point math broken?
                                
                                    (31个答案)
                                
                        
                                5个月前关闭。
            
                    
当给定输入150时,我期望输出在数学上是正确的答案70685.7750,但是我得到了错误的输出70685.7812

#include<stdio.h>

int main()
{
  float A,n,R;

  n=3.14159;

  scanf("%f",&R);
  A=n*(R*R);

  printf("A=%.4f\n",A);
}

最佳答案

floatdouble编号在内存中的显示不十分准确。主要原因是内存有限,而大多数非整数不是。

最好的例子是PI。您可以根据需要指定任意多个数字,但仍为近似值。

表示数字的精度有限是以下规则的原因:


  当使用floatsdouble数字时,不要检查是否相等(m == n),而是要检查它们之间的差异是否小于某个错误((m-n) < e




请注意,正如评论中提到的那样,上述规则也不是“所有规则的母体规则”。还有其他规则。

为了使应用程序正常工作,必须针对每种特定情况进行仔细的分析。

(感谢@EricPostpischil的提醒)

10-08 17:15