Floating point 计算中点

Floating point 计算中点,floating-point,bisection,Floating Point,Bisection,为什么在二分法中,最好使用 c = a + (b - a) / 2. 而不是更简单的: c = (a + b) / 2. 所有变量都是浮点。这是为了避免中间计算中可能出现的溢出/精度损失。溢出不应该是浮点类型的问题。精度损失可能是。嗯,我研究过减法运算比接近浮点数的加法运算更糟糕,所以为什么我用+而不是-?如何和为什么?我似乎找不到一个解释来解释为什么这样做。我们是在谈论int还是float?你能提到“为什么它更好”吗?为什么你认为第一种方法更好?与第二种方法相比,它涉及一个额外的浮点运算;

为什么在二分法中,最好使用

c = a + (b - a) / 2.
而不是更简单的:

c = (a + b) / 2.

所有变量都是浮点。

这是为了避免中间计算中可能出现的溢出/精度损失。

溢出不应该是浮点类型的问题。精度损失可能是。嗯,我研究过减法运算比接近浮点数的加法运算更糟糕,所以为什么我用+而不是-?如何和为什么?我似乎找不到一个解释来解释为什么这样做。我们是在谈论
int
还是
float
?你能提到“为什么它更好”吗?为什么你认为第一种方法更好?与第二种方法相比,它涉及一个额外的浮点运算;在极少数情况下,
a
b
巨大且符号相反的情况下,它有溢出的风险(而在几乎同样罕见的情况下,
a
b
巨大且符号相同的情况下,第二种方法有溢出的风险);忽略溢出,第二种方法将始终计算典型机器上正确舍入的中点。第一个也是如此,至少当
a
b
接近时(可能是一般情况;我不确定)。因此,我认为第一种方法不会取得任何胜利。