Pythonのfloat型の最大値・最小値とは?浮動小数点数の範囲を完全解説
目次
Python float型の基本仕様
Pythonのfloat型は、IEEE 754倍精度浮動小数点数(64ビット)として実装されています。整数型intとは異なり、明確な最大値・最小値が存在します。
import sys
# float型の基本情報を確認
print(f"最大値: {sys.float_info.max}")
print(f"最小値: {sys.float_info.min}")
print(f"精度: {sys.float_info.dig} 桁")
print(f"イプシロン: {sys.float_info.epsilon}")
float型の最大値と最小値
最大値の詳細
import sys
import math
# 最大値
max_float = sys.float_info.max
print(f"最大値: {max_float}")
print(f"科学記法: {max_float:.2e}")
# 最大値を超えるとinfになる
overflow = max_float * 10
print(f"オーバーフロー: {overflow}") # inf
# math.infと比較
print(f"無限大: {math.inf}")
print(f"オーバーフローとinfは同じ: {overflow == math.inf}")
最小値(正の最小値)の詳細
# 正の最小値(ゼロに最も近い正の値)
min_float = sys.float_info.min
print(f"正の最小値: {min_float}")
print(f"科学記法: {min_float:.2e}")
# より小さい値はアンダーフローして0になる
underflow = min_float / 10
print(f"アンダーフロー: {underflow}")
float型の精度制限
有効桁数の確認
import sys
# 有効桁数
digits = sys.float_info.dig
print(f"有効桁数: {digits}")
# 精度の限界を確認
num1 = 1.0000000000000001 # 16桁
num2 = 1.0000000000000002 # 16桁
print(f"num1: {num1}")
print(f"num2: {num2}")
print(f"同じ値として認識: {num1 == num2}")
イプシロン(機械精度)
import sys
epsilon = sys.float_info.epsilon
print(f"機械精度: {epsilon}")
print(f"1.0 + epsilon: {1.0 + epsilon}")
print(f"1.0と異なる: {1.0 + epsilon != 1.0}")
# epsilonより小さい値は無視される
small_value = epsilon / 2
print(f"1.0 + epsilon/2: {1.0 + small_value}")
print(f"1.0と同じ: {1.0 + small_value == 1.0}")
特殊な値の扱い
無限大(inf)
import math
# 無限大の生成
pos_inf = float('inf')
neg_inf = float('-inf')
print(f"正の無限大: {pos_inf}")
print(f"負の無限大: {neg_inf}")
print(f"math.inf: {math.inf}")
# 無限大の演算
print(f"inf + 1: {pos_inf + 1}")
print(f"inf * 2: {pos_inf * 2}")
print(f"inf / inf: {pos_inf / pos_inf}") # nan
NaN(非数)
import math
# NaNの生成
nan_value = float('nan')
print(f"NaN: {nan_value}")
# NaNの特徴
print(f"NaN == NaN: {nan_value == nan_value}") # False
print(f"NaN判定: {math.isnan(nan_value)}") # True
# NaNが生成される演算
print(f"0 / 0: {0.0 / 0.0}") # nan
print(f"inf - inf: {math.inf - math.inf}") # nan
float型の制限を確認する方法
詳細情報の取得
import sys
info = sys.float_info
print(f"最大値: {info.max}")
print(f"最小正規化数: {info.min}")
print(f"機械精度: {info.epsilon}")
print(f"仮数部のビット数: {info.mant_dig}")
print(f"最大指数: {info.max_exp}")
print(f"最小指数: {info.min_exp}")
print(f"有効桁数: {info.dig}")
範囲チェック関数
import math
import sys
def check_float_range(value):
"""float型の値が有効範囲内かチェック"""
if math.isnan(value):
return "NaN"
elif math.isinf(value):
return "無限大"
elif abs(value) > sys.float_info.max:
return "範囲外(大きすぎ)"
elif 0 < abs(value) < sys.float_info.min:
return "範囲外(小さすぎ)"
else:
return "有効範囲内"
# テスト
test_values = [1.5, sys.float_info.max, float('inf'), float('nan')]
for val in test_values:
print(f"{val}: {check_float_range(val)}")
実用的な注意点
計算精度の問題
# 浮動小数点数の精度問題
result = 0.1 + 0.2
print(f"0.1 + 0.2 = {result}")
print(f"0.3と等しい: {result == 0.3}")
# より正確な比較方法
print(f"差の絶対値: {abs(result - 0.3)}")
print(f"許容範囲内: {abs(result - 0.3) < 1e-15}")
大きな数値の演算
import sys
max_val = sys.float_info.max
print(f"最大値: {max_val:.2e}")
# 最大値に近い計算
large_calc = max_val * 0.5
print(f"最大値の半分: {large_calc:.2e}")
# オーバーフローの確認
try:
overflow = max_val * 2
print(f"2倍: {overflow}") # inf
except OverflowError:
print("オーバーフローエラー")
まとめ
Pythonのfloat型は64ビットのIEEE 754標準に準拠しており、最大値約1.8×10^308、最小正値約2.2×10^-308の範囲で数値を扱えます。整数型とは異なり明確な制限があるため、科学計算や工学計算では精度とオーバーフロー/アンダーフローに注意が必要です。正確な数値計算が必要な場合は、decimalモジュールの使用を検討しましょう。
■らくらくPython塾 – 読むだけでマスター
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座



