数值稳定性 - 乘法/除法是否提供比分割/乘法更精确的值?

时间:2014-07-28 14:41:17

标签: floating-point precision floating-accuracy numerical-stability

请考虑以下代码:

$result *= $oldFactor / $newFactor;  //using shorthand *= operator

实际上就是这样:

$result = $oldFactor / $newFactor * $result;  //division done first

我也可以手动编写它:

$result = $result * $oldFactor / $newFactor;  //multiplication done first

我认为乘法是一种更简单的操作,并且与除法运算相比,它不会受到舍入误差的影响。

此外,我有这种感觉,对于大多数日常人类数字,乘法操作将在分割之前产生“更大的数字”(假设使用的数字通常大于1)。分割后的较大数字在数值上更稳定。示例..考虑5 * 7 / 2.3,其中第一个操作(mult)是精确的,因为这些数字完全用二进制表示。然后划分完成,它就像我们要得到的那样精确。但是考虑7 / 2.3 * 5,其中第一个操作是除法,并且我们已经生成了一个无法用二进制精确表示的数字,并且下一个操作(mult)通过乘法夸大任何不精确。

我的问题基本上是......这有关系吗?我首先使用除法时确实会失去精确度,或者我使用对我来说最适合的操作顺序是否完全安全,我会得到相同的结果?

0 个答案:

没有答案