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