【Python・NumPy】finfo()でfloat型が正確に扱えるおおよその10進桁数(precision)を取得する方法
PythonのNumPyで、ある浮動小数点型が正確に表現できる「おおよその10進数の桁数」を調べるには、numpy.finfo()メソッドのprecision属性を使用します。finfo()の第一引数には、情報を取得したいfloatデータ型(float16・float32・float64など)を指定します。
finfo()で取得できる主な属性は以下のとおりです。
- precision:そのfloat型が正確に扱えるおおよその10進桁数(有効数字)
- iexp:指数部に割り当てられているビット数
- min:指定したdtypeで表現できる最小値
- max:指定したdtypeで表現できる最大値
手順
ステップ1:ライブラリのインポート
最初に、必要なライブラリをインポートします。
import numpy as np
ステップ2:float16型の情報を確認
np.float16の値をfinfo()に渡し、precision(おおよその10進桁数)、iexp(指数部のビット数)、min(最小値)、max(最大値)を順番に出力します。
a = np.finfo(np.float16(45.976))
print("おおよその10進桁数(precision)...\n", a.precision)
print("指数部のビット数(iexp)...\n", a.iexp)
print("float16型の最小値(min)...\n", a.min)
print("float16型の最大値(max)...\n", a.max)
ステップ3:float32型の情報を確認
同様に、単精度のnp.float32についても各属性を出力します。
b = np.finfo(np.float32(22.3))
print("おおよその10進桁数(precision)...\n", b.precision)
print("指数部のビット数(iexp)...\n", b.iexp)
print("float32型の最小値(min)...\n", b.min)
print("float32型の最大値(max)...\n", b.max)
ステップ4:float64型の情報を確認
最後に、倍精度のnp.float64(Python標準のfloatと同等)についても確認します。
c = np.finfo(np.float64(29.2))
print("おおよその10進桁数(precision)...\n", c.precision)
print("指数部のビット数(iexp)...\n", c.iexp)
print("float64型の最小値(min)...\n", c.min)
print("float64型の最大値(max)...\n", c.max)
完全なサンプルコード
import numpy as np
# float型が正確に表現できるおおよその10進桁数を取得するには、
# numpy.finfo()メソッドのprecision属性を使用します。
# finfo()の第一引数には、情報を取得したいfloatデータ型を渡します。
# float16型の場合
a = np.finfo(np.float16(45.976))
print("おおよその10進桁数(precision)...\n", a.precision)
print("指数部のビット数(iexp)...\n", a.iexp)
print("float16型の最小値(min)...\n", a.min)
print("float16型の最大値(max)...\n", a.max)
# float32型の場合
b = np.finfo(np.float32(22.3))
print("おおよその10進桁数(precision)...\n", b.precision)
print("指数部のビット数(iexp)...\n", b.iexp)
print("float32型の最小値(min)...\n", b.min)
print("float32型の最大値(max)...\n", b.max)
# float64型の場合
c = np.finfo(np.float64(29.2))
print("おおよその10進桁数(precision)...\n", c.precision)
print("指数部のビット数(iexp)...\n", c.iexp)
print("float64型の最小値(min)...\n", c.min)
print("float64型の最大値(max)...\n", c.max)
実行結果
おおよその10進桁数(precision)... 3 指数部のビット数(iexp)... 5 float16型の最小値(min)... -65500.0 float16型の最大値(max)... 65500.0 おおよその10進桁数(precision)... 6 指数部のビット数(iexp)... 8 float32型の最小値(min)... -3.4028235e+38 float32型の最大値(max)... 3.4028235e+38 おおよその10進桁数(precision)... 15 指数部のビット数(iexp)... 11 float64型の最小値(min)... -1.7976931348623157e+308 float64型の最大値(max)... 1.7976931348623157e+308
結果のまとめ
| データ型 | precision | iexp | min | max |
|---|---|---|---|---|
| float16 | 3 | 5 | -65500.0 | 65500.0 |
| float32 | 6 | 8 | 約-3.4e+38 | 約3.4e+38 |
| float64 | 15 | 11 | 約-1.8e+308 | 約1.8e+308 |
このように、finfo()を使えば各float型の精度や表現範囲をひと目で確認できます。半精度のfloat16はメモリ消費を抑えられる代わりに精度が低く、倍精度のfloat64は高い精度と非常に広い表現範囲を持ちます。機械学習や科学技術計算など、用途に応じて適切なデータ型を選択することが重要です。
-
Pythonで浮動小数点の10進数を8進数に変換する方法
浮動小数点形式の10進数と、小数部の桁数が与えられたとき、その値を8進数に変換するのが本記事の目的です。 変換の基本的な流れは以下の通りです。まず浮動小数点値から整数部分を取り出して8進数に変換し、次に小数部分を8進数に変換し、最後に両者を結合します。 変換の手順 ステップ1:整数部分の変換 整数部分を8で割り続け、商が8未満になるまで余りを記録していきます。そして、得られたすべての余りを並べることで8進数表現が完成します。これは一般的な「除算による基数変換」の手法です。 ステップ2:小数部分の変換 小数部分に対しては、逆に8を掛け続けます。掛け算を行うたびに整数部分を記録し、残った新しい小数
-
Pythonでインスタンスのクラス名を取得する方法をわかりやすく解説
Pythonでは、__class__ 属性を使うことで、あるインスタンスがどのクラスから生成されたものかを簡単に確認できます。さらに __class__.__name__ を使えば、クラス名だけを文字列として取り出すことも可能です。以下に、具体的なコード例とその実行結果を示します。サンプルコードclass Number: def __init__(self, number): self.number = number n1 = Number(1) print(n1.__class__) print(n1.__class__.__name__)実行結果このコードを実行す