[英]Incorrect floating point math?
这是一个让我在过去几个小时里完全感到困惑的问题......
我的程序中有一个硬编码的等式:
double s2;
s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;
每次我运行该程序时,计算机会吐出3作为答案,但是手动进行数学计算,我得到4.更进一步,在将方程式输入Matlab之后,我也得到了答案4.这里有什么进展?
我唯一能想到的就是这里出错了将是错误的。 然而,最多有5个舍入误差,再加上使用双精度数学,我的最大误差将非常小,所以我怀疑这是问题所在。
有谁能提供任何解决方案?
提前致谢,
-Faken
你实际上并没有在那里进行浮点数学运算,你正在进行整数运算,这将使得除法的结果成为可能。
在C ++中,5/4 = 1, 而不是 1.25 - 因为5和4都是整数,所以结果将是一个整数,因此结果的小数部分被丢弃。
另一方面,5.0 / 4.0将等于约。 1.25因为5.0和4.0中至少有一个是浮点数,所以结果也是浮点数。
你将整数除法与浮点除法混淆了。 3是整数除法的正确答案。 如果将这些值转换为浮点数,您将获得4。
其中一些是使用整数运算进行评估的。 尝试在数字中添加一个小数位,例如6.0
而不是6
来告诉编译器你不需要整数运算。
s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;
收益率3
s2 = -(0.*13.)/84.+6./42.-0./84.+24./12.+(6.*13.)/42.;
做你所期待的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.