c - 为什么 float 输出的结果与 double 不同?
问题描述
我有一个程序,如果我使用浮点数它会输出29.325001
,但如果我使用双倍它29.325000
(这是正确的结果)。
我认为 float 会四舍五入到小数点后 14 位,但它产生的结果与预期不同?
下面的代码:
int elements, i;
scanf("%d", &elements);
if (elements > 10){
return 0;
}
float ppp[10], takeHowMuch[10], total;
for (i = 0; i < elements; i++){
scanf("%f", &ppp[i]);
}
for (i = 0; i < elements; i++){
scanf("%f", &takeHowMuch[i]);
}
total = (takeHowMuch[0] * ppp[0]) + (takeHowMuch[1] * ppp[1]) + (takeHowMuch[2] * ppp[2]) + (takeHowMuch[3] * ppp[3]);
printf("%.6f", total);
return 0;
解决方案
“我认为 float 会四舍五入到小数点后 14 位,”
代码精度期望太高。
典型float
显示为十进制编码,如预期的那样,至少有 6 个前导有效数字。 29.325001
是 8。
采用FLT_DIG
// printf("%.6f", total);
printf("%.*e\n", FLT_DIG - 1, total);
printf("%.*g\n", FLT_DIG, total);
输出
2.93250e+01
29.325
推荐阅读
- excel - 将 excel 导入 SQL Server 时出现错误:SSIS 错误代码 DTS_E_PRIMEOUTPUTFAILED
- sql - Liquibase / Oracle:以一对多关系将值从一个表复制到另一个表
- scala - 使用 df.as[T] 和 df.asInstanceOf[Dataset[T]] 有什么区别?
- input - 为什么单击按钮时 $w("#input1").value 不更改?(蜡网站代码)
- reactjs - 在函数上使用 React FC
- python - 在模块/包债券定价 python 中函数 bond_price 的问题
- regex - 正则表达式 - 计算字符数以验证匹配
- sharepoint - 如何使用 wget 从 sharepoint 下载公用文件夹
- utf-8 - 由于阶段名称中的非美国 ascii 字符导致查询中的语法错误
- google-chrome-extension - 使用清单 v3 拦截 chrome 扩展中的请求