\

Pythonで浮動小数点数を扱う際、その内部表現は2進数で行われます。このため、10進数の浮動小数点数は、2進数の浮動小数点数で近似された後、実際にマシンに記憶されます。

例えば、10進数の0.1は、2進数では正確に表現できません。2進数では、1/10は循環小数となり、有限の桁で止めると近似値を得ることになります。近年のほとんどのコンピュータでは、float型は、最上位ビットから数えて最初の53ビットを分子、2の冪乗を分母とした、二進小数で近似されます。

Pythonでは、この2進数で近似された値を10進数で表示しますが、その際には丸めが行われます。例えば、Pythonが2進数で近似された0.1の近似値をそのまま10進数で表示していたら、その結果は次のようになったでしょう:

>>> 0.1
0.1000000000000000055511151231257827021181583404541015625

しかし、これは多くの人が必要と感じるよりも多すぎる桁数です。そのため、Pythonは丸めた値を表示することで、桁数を扱いやすい範囲にとどめます:

>>> 1 / 10
0.1

このように、Pythonの浮動小数点数の表示は、実際に格納されている値が元の10進小数の近似値でしか無いことを忘れがちです。

このような2進数の浮動小数点の仕組みを理解することは、Pythonで数値計算を行う際に重要です。特に、数値の比較や丸めを行う際には、この仕組みを理解しておくことで、意図しない結果を避けることができます。

参考文献:
Python公式ドキュメンテーション: 浮動小数点演算、その問題と制限.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です