概要
この記事では、Numpy
で扱える浮動小数点数の精度や最大・最小値の範囲を取得する方法について説明する。
また、おまけとして、整数型の最大・最小値を取得する方法についても述べる。
numpy.finfo()
関数の概要
Numpy
で扱える浮動小数点数の、各種パラメータを取得するためにはnumpy.finfo()
関数を用いる。
(入力:64ビット浮動小数点数numpy.float64
の情報を取得)
import numpy as np
print(np.finfo(np.float64))
(出力)
Machine parameters for float64
---------------------------------------------------------------
precision = 15 resolution = 1.0000000000000001e-15
machep = -52 eps = 2.2204460492503131e-16
negep = -53 epsneg = 1.1102230246251565e-16
minexp = -1022 tiny = 2.2250738585072014e-308
maxexp = 1024 max = 1.7976931348623157e+308
nexp = 11 min = -max
---------------------------------------------------------------
取得できる情報
precision
この浮動小数点数が正確に表現できる、おおよその小数点以下の桁数(10進数)
machep
eps
を算出するための2
の次数
> print("{:.16e}".format(2.0**-52))
2.2204460492503131e-16 # eps
negep
epsneg
を算出するための2
の次数
> print("{:.16e}".format(2.0**-53))
1.1102230246251565e-16 # epsneg
minexp
浮動小数点数の指数部(2^n
)の最小値。
絶対値が2^{minexp}
未満の数は非正規化数となる。
> print("{:.16e}".format(2.0**-1022))
2.2250738585072014e-308 # tiny
maxexp
浮動小数点数の指数部(2^n
)の上限。
絶対値がこの値以上だとオーバーフローする。
> 2.0**1023
8.98846567431158e+307
>
> 2.0**1024
---------------------------------------------------------------------------
OverflowError Traceback (most recent call last)
<ipython-input-111-ad0936eef388> in <module>
----> 1 2.0**1024
OverflowError: (34, 'Result too large')
nexp
指数部の桁数(符号とバイアスを含む)
resolution
この浮動小数点数の分解能(10進数)。
numpy.float64
の場合は約1e-15
刻みの小数が表現できる。
exp
1.0
とその次に大きい数の差
epsneg
1.0
とその次に小さい数の差
tiny
最小の正規化数
max
浮動小数点数の最大値
min
浮動小数点数の最小値。
基本的には-max
として定義される。
例
Numpy
では16ビットnumpy.float16
、32ビットnumpy.float32
の浮動小数点数も使える。
(入力:numpy.float16
)
import numpy as np
print(np.finfo(np.float16))
(出力)
Machine parameters for float16
---------------------------------------------------------------
precision = 3 resolution = 1.00040e-03
machep = -10 eps = 9.76562e-04
negep = -11 epsneg = 4.88281e-04
minexp = -14 tiny = 6.10352e-05
maxexp = 16 max = 6.55040e+04
nexp = 5 min = -max
---------------------------------------------------------------
(入力:numpy.float32
)
import numpy as np
print(np.finfo(np.float32))
(出力)
Machine parameters for float32
---------------------------------------------------------------
precision = 6 resolution = 1.0000000e-06
machep = -23 eps = 1.1920929e-07
negep = -24 epsneg = 5.9604645e-08
minexp = -126 tiny = 1.1754944e-38
maxexp = 128 max = 3.4028235e+38
nexp = 8 min = -max
---------------------------------------------------------------
(おまけ)整数の最大・最小値
numpy.iinfo
を用いれば、整数型の最大・最小値を取得できる。
(入力)
import numpy as np
print(np.iinfo(np.int8))
print(np.iinfo(np.int16))
print(np.iinfo(np.int32))
print(np.iinfo(np.int64))
print(np.iinfo(np.uint8))
print(np.iinfo(np.uint16))
print(np.iinfo(np.uint32))
print(np.iinfo(np.uint64))
(出力)
Machine parameters for int8
---------------------------------------------------------------
min = -128
max = 127
---------------------------------------------------------------
Machine parameters for int16
---------------------------------------------------------------
min = -32768
max = 32767
---------------------------------------------------------------
Machine parameters for int32
---------------------------------------------------------------
min = -2147483648
max = 2147483647
---------------------------------------------------------------
Machine parameters for int64
---------------------------------------------------------------
min = -9223372036854775808
max = 9223372036854775807
---------------------------------------------------------------
Machine parameters for uint8
---------------------------------------------------------------
min = 0
max = 255
---------------------------------------------------------------
Machine parameters for uint16
---------------------------------------------------------------
min = 0
max = 65535
---------------------------------------------------------------
Machine parameters for uint32
---------------------------------------------------------------
min = 0
max = 4294967295
---------------------------------------------------------------
Machine parameters for uint64
---------------------------------------------------------------
min = 0
max = 18446744073709551615
---------------------------------------------------------------
Comments