浮動小数点数 (float型オブジェクト)

浮動小数点数 (float型オブジェクト)

浮動小数点数型 (float)

 浮動小数点数 (float型オブジェクト) は実数を近似する数値型です。

# 浮動小数点数の定義
# 浮動小数点数の定義
x = 0.4

# 整数を float型で定義します
y = 1.0

# 10 × (10 の 3 乗)
z = 10e3

# x のクラスを調べます
print(type(x), type(y), type(z))
<class 'float'> <class 'float'> <class 'float'> 

 整数 (int型オブジェクト) 同士の除算の結果として浮動小数点数が返ることもあります。

x = 1/10

print(x)
0.1

 float関数の引数に int型の数値を渡すと、float型の数値に変換されます。

x = float(100)

print(x)
100.0

 

浮動小数点数 (float) を用いた演算の精度

 浮動小数点数 0.1 を 10 回加えるというプログラムを実行してみます。

x = 0.0

for ct in range(10):
    x += 0.1

print(x)
0.9999999999999999

 期待されていた結果 (1.0) に少し届かない値が返されました。
 このように、浮動小数点数を用いた演算には僅かな誤差を伴います。
 表示される値が 0.1 であっても厳密には

  0.1000000000000000055511151231257827021181583404541015625

という値を扱っていることになります。ほとんどの 10 進数表記の小数は、2 進数表記に変換すると無限級数になってしまいますが、コンピュータで処理するためには有限の桁で打ち切る必要があります。これが誤差を生む要因なのですが、誤差を 0 にすることは原理的に不可能とされています。とはいえ、Python の float型は、ほとんどの分野の計算において十分に実用的な精度をもっています。ただし、会計アプリケーションなど、極めて高い精度が要求されるプログラムについては float型の代わりに Decimal型などを使ってください。

 進数変換の詳細については数学サイトのほうにある

 初等整数論講座第 2 回『整正数 N の k 進展開』

を参照してください。また特に小数点以下の進数変換については

 整数の演習問題 NT-04

が参考になると思います。いずれも数学的に厳密な解説を掲載しています。
 

float型オブジェクトのメソッド

as_integer_ratio()メソッド 有理数に変換

float.as_integer_ratio()

 as_integer_ratio()メソッドは float型の数値を (分子, 分母) という有理数に変換してタプル形式で返します。

# 自然対数の底 e の近似値
e = 2.71828182846

# e を分数に変換します
x = e.as_integer_ratio()

print(x)
(6121026514870223, 2251799813685248)

 

hex()メソッド 10 進数浮動小数点数を 16 進数文字列に変換

float.hex()

 hex()メソッドは float型の数値を 16 進数表記の文字列に変換します。
 その値はメモリに保有される値の正確なコピーとなります。

x = 2018.0

# x を 16 進数の文字列に変換します
y = x.hex()

print(y)
print(type(y))
0x1.f880000000000p+10
<class 'str'>

 p に続く数字は指数部を表しています。
 

fromhex()メソッド 16 進数文字列を 10 進数浮動小数点数に変換

float.fromhex(str)

 fromhex()メソッドは 16 進数文字列を 10 進数の浮動小数点数に変換します。

# 16 進数文字列
x = "0x1.f880000000000p+10"

# 10 進数の浮動小数点数に変換
y = float.fromhex(x)

print(y)
print(type(y))
2018.0
<class 'float'>