考虑以下代码:
$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)通过乘法夸大了任何不精确性。
我的问题基本上是……这有关系吗?首先使用除法时我确实会失去精度,还是我完全安全地使用最适合我的任何操作顺序并且我会得到相同的结果?