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爆速講座