動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.8.3(32-bit)
浮動小数点数がどのような値の近似値なのかを確認するスクリプトと、Decimal型の小数なら近似値でないことを確認するスクリプトをご紹介しました。
近似値ではない小数も、目視確認しておくといいのではないかと思います。
[スポンサードリンク]
「0.5」「0.25」「0.125」等が近似値でないことを確認するサンプル
コンピューターは2進法で表現するのが基本であるため、float型のほとんどの小数は近似値に過ぎません。
逆にいえば、2進法でも問題なく表現できる「0.5」「0.25」「0.125」「0.0625」といった小数は、近似値ではありません。
そんな様子を目視確認するためのスクリプトです。
x = 1.0
for _ in range(10):
x = x / 2
print(f'{x:.18f}', x)
for _ in range(10):
x = x / 2
print(f'{x:.18f}', x)
実行結果は、以下のとおりです。
0.500000000000000000 0.5 0.250000000000000000 0.25 0.125000000000000000 0.125 0.062500000000000000 0.0625 0.031250000000000000 0.03125 0.015625000000000000 0.015625 0.007812500000000000 0.0078125 0.003906250000000000 0.00390625 0.001953125000000000 0.001953125 0.000976562500000000 0.0009765625
小数点以下18桁まで出力した値と、
print(f'{x:.18f}', x)
元の数値とが同じであることを
print(f'{x:.18f}', x)
目視確認できます。
サンプルスクリプトで行っている処理
上記のスクリプトでは、以下の処理をおこなっています。
変数xにfloat型の「1.0」を代入しておいて、
x = 1.0
10回for文を回す中で、
for _ in range(10):
2で割り算した結果を、変数xに再代入して、
x = x / 2
f-stringで小数第18位まで表示するようにした文字列と、変数xの値をそのまま出力しています。
print(f'{x:.18f}', x)
最終更新日時:2024-01-11 09:40
[スポンサードリンク]