C中的不一致求和
当我运行以下程序时:C中的不一致求和,c,floating-point,floating-point-precision,C,Floating Point,Floating Point Precision,当我运行以下程序时: #include <stdio.h> #include <math.h> int main() { double sum, increase; long amount, j; printf("sum = "); scanf("%lf", &sum); printf("increase = "); scanf("%lf", &increase); printf("amount
#include <stdio.h>
#include <math.h>
int main()
{
double sum, increase;
long amount, j;
printf("sum = ");
scanf("%lf", &sum);
printf("increase = ");
scanf("%lf", &increase);
printf("amount = ");
scanf("%ld", &amount);
for (j = 1; j <= amount; j++)
{
sum += increase;
}
printf("%lf\n", sum);
return 0;
}
其中,我在每种情况下都将变量“金额”增加了1
- 在第一个例子中,求和给出了我所期望的结果
- 在第二种情况下,它令人惊讶地给出了相同的值
- 在第三部分,它继续求和
谢谢 这是格式问题,而不是数字问题。如果将
printf
更改为
printf("%.12lf\n", sum);
结果看起来更符合您的预期:
sum = increase = amount = 432.438851000198
sum = increase = amount = 432.438852000198
sum = increase = amount = 432.438853000198
结尾的“垃圾”是由于浮点数的精度有限。你忘了实际问题了吗?浮点数的精度有限,我会在某个地方失去足够的精度,结果是相同的。每一位计算机科学家都应该知道的关于浮点运算的知识——我很想投票把它作为的副本来结束,因为它几乎是一样的。我不这样做的唯一原因是,链接问题中的代码质量太差,而您的代码至少可读性和简洁性很强。:)这是您在ideone上稍加修改的程序。
sum = increase = amount = 432.438851000198
sum = increase = amount = 432.438852000198
sum = increase = amount = 432.438853000198