このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】floatは倍精度

Pythonのfloatは倍精度

 Pythonでは、浮動小数点数型であるfloatが、IEEE 754の倍精度(64ビット)で実装されています。これは、C言語のdoubleを利用しているため、多くの環境で同じ仕様となっており、単精度(32ビット)ではなく、約15桁の有効桁数を持つ倍精度で計算されることを意味します。ここでは、Pythonのfloatがどのように実装され、どのような特性を持っているのか、そして計算における注意点を理解するための基礎知識を解説します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.floatの実装とIEEE 754

 Pythonのfloatは、C言語のdoubleを利用しており、IEEE 754に基づく64ビットの浮動小数点数です。IEEE 754規格は、計算速度と精度のバランスを取り、ハードウェアでの高速な演算を可能にします。以下の表は、IEEE 754に準拠する浮動小数点数の基本仕様を示しています。

項目内容
ビット数64ビット(倍精度)
有効桁数約15桁程度
実装CPythonではC言語のdoubleを使用。
仕様IEEE 754による単精度(32ビット)と倍精度(64ビット)の規格があるが、Pythonは倍精度のみ。

2.有効桁数と丸め誤差の例

 倍精度であるため、Pythonのfloatは約15桁の精度で値を正しく表現できます。しかし、15桁を超える精度が必要な場合、丸め誤差が発生することがあります。下記の例は、15桁と16桁の値の比較を示しています。

print(9.99999999999999)   # 15桁: 正しく表現される例
print(9.999999999999999)  # 16桁: 9.999999999999998 と丸められる例

実行結果

9.99999999999999
9.999999999999998

3.floatリテラルの記法

 Pythonでは、浮動小数点数リテラルは通常表記と指数表記の2種類の方法で記述できます。どちらの場合も、内部的には同じ倍精度のfloatとして扱われます。

記法の種類説明
通常の記法1234.5678小数点を使って通常表記
指数表記1.2345678e3仮数部と指数部で数値を表現(1.2345678×10³)
print(1234.5678)   # 小数点を使って通常表記
print(1.2345678e3) # 仮数部と指数部で数値を表現(1.2345678×10³)

実行結果

1234.5678
1234.5678

4.floatの用途とその限界

 浮動小数点数は、科学技術計算や経済計算などで広く利用されますが、有効桁数に限界があるため、極端に精度の高い計算が必要な場合は、Pythonのdecimalモジュールなどを利用して有効桁数を指定する方法が推奨されます。

用途特徴注意点
通常の計算倍精度で約15桁の精度を持つ。超える桁数の値は丸め誤差が生じる。
高精度計算decimalモジュールを使うことで任意の精度に設定可能通常のfloatより処理が遅くなる場合がある。

まとめ

 ここでは、Pythonの浮動小数点数型floatが、IEEE 754規格に基づく64ビットの倍精度として実装されていること、その結果約15桁の精度で値を表現できること、さらには指数表記による表現方法や、丸め誤差が発生する例、そして必要に応じた高精度計算の代替手段について学びました。