Numpyで浮動小数点数の精度・最大値・最小値を取得

Numpy
Sponsored

概要

この記事では、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