4

次のコードを検討してください。

$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) が正確である場所を検討してください。これらの数値は正確に 2 進数で表されます。次に、除算が行われ、取得しようとしているのと同じくらい正確になります。しかし7 / 2.3 * 5、最初の演算が除算であり、すでに 2 進数で正確に表現できない数を生成し、次の演算 (mult) が乗算によって不正確さを誇張している場合を考えてみましょう。

私の質問は基本的に...これは問題ですか?除算を最初に使用すると実際に精度が失われますか?それとも、自分に最適な操作の順序を使用しても完全に安全であり、同じ結果が得られますか?

4

1 に答える 1