浮点数学不正确?

Fak*_*ken 2 c++ floating-point

这是一个让我在过去几个小时里完全感到困惑的问题......

我的程序中有一个硬编码的等式:

double s2;

s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;
Run Code Online (Sandbox Code Playgroud)

每次我运行该程序时,计算机会吐出3作为答案,但是手动进行数学计算,我得到4.更进一步,在将方程式输入Matlab之后,我也得到了答案4.这里有什么进展?

我唯一能想到的就是这里出错了就是圆满错误.然而,最多有5个舍入误差,再加上使用双精度数学,我的最大误差将非常小,所以我怀疑这是问题所在.

有谁能提供任何解决方案?

提前致谢,

-Faken

Amb*_*ber 17

你实际上并没有在那里进行浮点数学运算,你正在进行整数运算,这将使得除法的结果成为可能.

在C++中,5/4 = 1,而不是 1.25 - 因为5和4都是整数,所以结果将是一个整数,因此结果的小数部分被丢弃.

另一方面,5.0/4.0将等于约.1.25因为5.0和4.0中至少有一个是浮点数,所以结果也是浮点数.

  • 1.25在基数2中可表示,4.0和5.0也是如此.应该是准确的. (2认同)
  • 既然这是一个任意的例子dmckee,我决定采用更安全的陈述.:) (2认同)

duf*_*ymo 7

你将整数除法与浮点除法混淆了.3是整数除法的正确答案.如果将这些值转换为浮点数,您将获得4.