首页 > 解决方案 > 简单的浮点乘法没有给出预期的结果

问题描述

当给出输入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);
}

标签: c

解决方案


float并且double数字在内存中的表示不是很准确。主要原因是内存有限,大多数非整数都没有。

最好的例子是PI。您可以指定任意数量的数字,但它仍然是一个近似值。

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

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


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

必须针对每种特定情况进行仔细分析,以便获得正常工作的应用程序。

(感谢@EricPostpischil 的提醒)


推荐阅读