Python・NumPyのfinfo()で浮動小数点型の指数部ビット数(iexp)を取得する方法
PythonのNumPyでは、numpy.finfo()メソッドのiexp属性を使うことで、浮動小数点表現における指数部分のビット数を取得できます。finfo()の引数には、情報を取得したいfloat型(データ型)を指定します。
本記事では、float16・float32・float64の各型について、指数部のビット数に加えて、最小値(min)と最大値(max)も併せて確認していきます。
実行手順
1. 必要なライブラリをインポート
まずはNumPyをインポートします。
import numpy as np
2. float16型の情報を確認
float16型に対してfinfo()を実行します。iexpで指数部のビット数を、minとmaxでそれぞれ指定したdtypeの最小値・最大値を取得できます。
a = np.finfo(np.float16(45.9))
print("float16型の指数部ビット数...\n", a.iexp)
print("float16型の最小値...\n", a.min)
print("float16型の最大値...\n", a.max)3. float32型の情報を確認
同様に、float32型についても確認します。
b = np.finfo(np.float32(22.3))
print("\nfloat32型の指数部ビット数...\n", b.iexp)
print("float32型の最小値...\n", b.min)
print("float32型の最大値...\n", b.max)4. float64型の情報を確認
最後に、float64型(標準的な倍精度浮動小数点型)を確認します。
c = np.finfo(np.float64(29.2))
print("\nfloat64型の指数部ビット数...\n", c.iexp)
print("float64型の最小値...\n", c.min)
print("float64型の最大値...\n", c.max)サンプルコード全体
import numpy as np
# numpy.finfo()メソッドのiexp属性を使って、
# 浮動小数点表現の指数部分のビット数を取得します。
# 第1引数には、情報を取得したいfloat型(データ型)を指定します。
# float16型の確認
# iexp:指数部のビット数
# min:指定したdtypeの最小値
# max:指定したdtypeの最大値
a = np.finfo(np.float16(45.9))
print("float16型の指数部ビット数...\n", a.iexp)
print("float16型の最小値...\n", a.min)
print("float16型の最大値...\n", a.max)
# float32型の確認
b = np.finfo(np.float32(22.3))
print("\nfloat32型の指数部ビット数...\n", b.iexp)
print("float32型の最小値...\n", b.min)
print("float32型の最大値...\n", b.max)
# float64型の確認
c = np.finfo(np.float64(29.2))
print("\nfloat64型の指数部ビット数...\n", c.iexp)
print("float64型の最小値...\n", c.min)
print("float64型の最大値...\n", c.max)実行結果
float16型の指数部ビット数... 5 float16型の最小値... -65500.0 float16型の最大値... 65500.0 float32型の指数部ビット数... 8 float32型の最小値... -3.4028235e+38 float32型の最大値... 3.4028235e+38 float64型の指数部ビット数... 11 float64型の最小値... -1.7976931348623157e+308 float64型の最大値... 1.7976931348623157e+308
結果の解説
IEEE 754規格に基づく浮動小数点数は、「符号部」「指数部」「仮数部」で構成されています。各型の指数部ビット数は以下の通りです。
- float16(半精度):指数部5ビット、仮数部10ビット
- float32(単精度):指数部8ビット、仮数部23ビット
- float64(倍精度):指数部11ビット、仮数部52ビット
このように、finfo()のiexp属性を参照すれば、任意の浮動小数点型が内部でどれだけのビットを指数部に割り当てているかを簡単にプログラムから確認できます。数値精度やオーバーフロー挙動を理解したい場合に役立つテクニックです。
-
C言語で浮動小数点数のセットビット数を数える方法を解説
この問題では、1つの浮動小数点数が与えられ、その2進表現におけるセットビット(1になっているビット)の数を求める必要があります。例えば、浮動小数点数が 0.15625 の場合、セットビットは6個になります。一般的なCコンパイラでは、単精度浮動小数点形式で数値が表現されるため、メモリ上では次のようなビット列として格納されます。考え方:ポインタとバイト単位での処理浮動小数点数をビット値に変換して調べるには、まず対象の数値をポインタ変数に渡し、そのポインタを char* 型にキャストします。こうすることで、float型のデータを1バイトずつ順番に処理できるようになり、各バイト(char型)ごとのセッ
-
【Python入門】数値の右端にあるセットビットをクリアする方法
はじめにビット演算は、プログラミングにおいて効率的な処理を実現するための重要なテクニックの一つです。本記事では、Pythonを使って「数値の右端にセットされているビット(1になっているビット)をクリア(0に戻す)する方法」を解説します。この操作には、ビットごとの論理積を求める「&」演算子を使用します。ポイントは、元の数値から1を引いた値との間でAND演算を行うことです。実装例以下のコードは、指定した整数の右端のセットビットをクリアする関数の実装例です。def clear_right_bit(my_val): return my_val & (my_val - 1) n