よくあるPythonの問題 - 3 浮動小数点型
By JoeVu, at: 2023年1月12日14:30
Estimated Reading Time: __READING_TIME__ minutes
![Common Python Problems - [3] Float Data Types](/media/filer_public_thumbnails/filer_public/47/99/479924d1-8cf9-46d7-9a61-eef8216b626a/python_mistake_-_float_data_type.png__1500x900_q85_crop_subsampling-2_upscale.jpg)
![Common Python Problems - [3] Float Data Types](/media/filer_public_thumbnails/filer_public/47/99/479924d1-8cf9-46d7-9a61-eef8216b626a/python_mistake_-_float_data_type.png__400x240_q85_crop_subsampling-2_upscale.jpg)
1. 浮動小数点演算の不正確さ
例1
x = 1/10
y = 1/5
z = x + y
print(z) # 期待される出力は0.3
出力
0.30000000000000004
解決策:Pythonのdecimalモジュールを使用すると、10進数を正確に表現し、浮動小数点の不正確さを回避できます。
from decimal import Decimal
x = Decimal("1") / Decimal("10")
y = Decimal("1") / Decimal("5")
z = x + y
print(z) # 期待される出力は0.3
出力
0.3
2. オーバーフローエラー
例1
Pythonにおけるfloatのオーバーフローエラーの例を以下に示します。
num1 = 9e309
num2 = 2
result = num1 * num2
print(result)
出力
inf
解決策:floatの値が大きすぎる場合、PythonはOverflowErrorを発生させます。このエラーを回避するには、Decimalモジュールを使用して大きな数を処理し、floatのオーバーフローエラーを防ぐことができます。例:
num1 = Decimal("9e309")
num2 = Decimal(2)
result = num1 * num2
print(result)
出力
1.8E+310
3. 丸め誤差
例1
# 0.1 + 0.2を計算しようとしています
x = 1/10
y = 1/5
z = x + y
print(z)
出力
0.30000000000000004
解決策:round()関数を使用して結果を丸めることができます
x = 1/10
y = 1/5
z = x + y
rounded_z = round(z, 2)
print(rounded_z)
出力
0.3