浮動小数点数の表現を調べる
このステップでは、Python で浮動小数点数がどのように表現されるか、およびその表現が数値比較に与える潜在的な影響を調べます。浮動小数点数は、コンピューターで実数(小数点付きの数値)を表すために使用されます。しかし、メモリに格納される方法のため、実際の実数の近似値になることが多いです。これにより、比較を行う際に予想外の結果が生じることがあります。
まず、VS Code エディタを使用して、~/project
ディレクトリに float_representation.py
という名前の Python ファイルを作成しましょう。
## Create a floating-point number
x = 0.1 + 0.2
## Print the value of x
print(x)
ファイルを保存し、次のコマンドをターミナルで実行してファイルを実行します。
python float_representation.py
出力が 0.3
になると思うかもしれませんが、おそらく次のような出力が表示されます。
0.30000000000000004
これは、0.1
と 0.2
を浮動小数点数として正確に表現できないためです。加算の結果は 0.3
に非常に近い数値ですが、正確には等しくありません。
では、この不正確さが比較にどのように影響するか見てみましょう。float_representation.py
ファイルに次のコードを追加します。
## Create a floating-point number
x = 0.1 + 0.2
## Check if x is equal to 0.3
if x == 0.3:
print("x is equal to 0.3")
else:
print("x is not equal to 0.3")
ファイルを保存し、再度実行します。
python float_representation.py
おそらく次のような出力が表示されます。
x is not equal to 0.3
これは、浮動小数点数の表現の問題により、x
が 0.3
と正確に等しくないためです。
浮動小数点数を正確に比較するには、許容誤差(tolerance)を使用する必要があります。正確な等価性をチェックする代わりに、2 つの数値の絶対差が小さな許容誤差よりも小さいかどうかをチェックします。
float_representation.py
ファイルを修正して許容誤差を追加します。
## Create a floating-point number
x = 0.1 + 0.2
## Define a tolerance value
tolerance = 1e-9 ## A small value like 0.000000001
## Check if x is approximately equal to 0.3
if abs(x - 0.3) < tolerance:
print("x is approximately equal to 0.3")
else:
print("x is not approximately equal to 0.3")
ファイルを保存し、もう一度実行します。
python float_representation.py
これで、次のような出力が表示されるはずです。
x is approximately equal to 0.3
許容誤差を使用することで、浮動小数点数の表現に内在する不正確さにもかかわらず、正確に比較することができます。これは、Python や他のプログラミング言語で浮動小数点数を扱う際に理解する必要がある重要な概念です。