c - 简单的浮点乘法没有给出预期的结果
问题描述
当给出输入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);
}
解决方案
float
并且double
数字在内存中的表示不是很准确。主要原因是内存有限,大多数非整数都没有。
最好的例子是PI
。您可以指定任意数量的数字,但它仍然是一个近似值。
表示数字的有限精度是以下规则的原因:
使用
floats
anddouble
数字时,不检查是否相等 (m == n
),而是检查它们之间的差异是否小于某个错误 ((m-n) < e
)
请注意,正如评论中所提到的,上述规则不是“所有规则的母规则”。还有其他规则。
必须针对每种特定情况进行仔细分析,以便获得正常工作的应用程序。
(感谢@EricPostpischil 的提醒)
推荐阅读
- vue.js - Nuxtjs + Vuetify + Purgecss
- python - 从未等待协程“get_quote”
- python - leetcode:使用链表添加两个数字
- odoo-8 - 如何通过向导中的新值更新我的 one2many
- .net - VSCode 找不到 dotnet,而普通 cmd 将在 Windows 10 上找到
- regex - 如何使用多个捕获组进行正则表达式替换?
- applescript - 更改 URL 而无需在 Google Chrome 中重新加载页面
- c++ - 如何安全地clock_cast天?
- solr - Luwak/Lucene vs Solr:TrieDateField 范围查询
- sql - 如何在不使用 Pivot 的情况下在垂直表中查找一列归零的条目