0xf

日記だよ

掛け算の順序

実に適当に試したやつで、適当な桁数のでかい数を適当にかけてみると順序によって結果が変わる。

>>> a = 100000000000.1
>>> b = 0.0000000000000003
>>> c = 100000000000.0
>>> d = 0.0000000000000006
>>> a * b * c * d
1.8000000000018001e-09
>>> d * c * b * a
1.8000000000018e-09

pythonはだいたいのプラットフォームで少数をIEEE 754にしたがって倍精度で表現するとして、53ビット精度なので精度が15桁である。したがって有効桁の幅が15桁を超える場合は小さいあたりが切り捨てられる。計算の途中で15桁を超える値が出現すると丸められてしまう。(そのため桁が小さい数字から計算していくなどの技がある)