Select Language

AI Technology Community

2.12、Python浮動小数点数(小数点)

浮動小数点数とは簡単に言えば実数で、小数とも呼ばれます。整数とは異なり、小数部分を持っています。浮動小数点数は統計や科学計算に広く用いられています。

現実生活で、私たちがよく言う「1時間半」は、1.5時間と表すべきです。すべての浮動小数点数は自然に生活の中に存在し、広く生活の中に存在しています。

すべての浮動小数点数は近似値です。

>>> 1.2 * 6
7.199999999999999
>>> 1.2 * 6 == 7.2  # 実は等しくない
False


そのため、2つの浮動小数点数が等しいかどうかを比較するには、abs(a - b) < 1e-5 で判断する必要があります。

>>> a = 1.2 * 6
>>> abs(a - 7.2) < 1e-5
True


なぜ浮動小数点数は整数と異なり、その値はすべて近似値と見なせるのでしょうか?これは採用されている進数法に関係しています。例えば10進法では、3分の1(1/3)は正確に表すことができず、近似的に0.333333に等しいだけです。しかし、この数は3進法では正確に0.1と表すことができます。同じようなことが2進法でも起こります。例えば、10進法の0.1は2進法では正確に表すことができません。

以下では、浮動小数点数10.5を例に挙げて、浮動小数点数の表記法を説明します。浮動小数点数は一般的に整数部分と小数部分の2つに分けられます。整数部分の表記法は整数の2進表記法と同じです。例えば、10を2進数で表すと1010になります。

10 = 8 + 2 = 23 + 21 = 0b1010


小数部分の各桁の重みは、順に2−1、2−2、2−3、2−4です。したがって、0.5は0.1と表すことができます。

したがって、10.5を2進数で表すと0b1010.1 = 0b1.0101 * 23になります。これが標準的な浮動小数点数の表記法で、数値部分の0b1.0101と指数の3で構成されています。数値部分は1以上2未満です。

16進法で表すと次のようになります。

0b1.0101 * 23 = 0x1.5 * 23


ただし、すべての数を手動でこのように計算する必要はありません。Pythonにはhex()関数が用意されており、これは浮動小数点数オブジェクトのメンバ関数です。以下にその使い方を示します。

>>> 10.5.hex()          # 内部表記法を取得
'0x1.5000000000000p+3'  # 数値部分は0x1.5、指数部分は3

浮動小数点数の基本演算

この節では、浮動小数点数の基本演算について引き続き説明します。加減乗除とべき乗演算が含まれます。

1) 加減乗除演算(+ - * /)

整数と同様に、浮動小数点数も加減乗除などの基本演算をサポートしており、演算記号も同じです。

>>> 1.2 + 1.3        # 足し算
2.5
>>> 1.2 - 2.3        # 引き算
-1.0999999999999999  # 近似値が得られる
>>> 1.2 * 2.0        # 掛け算
2.4
>>> 1.2 / 2.0        # 割り算
0.6

2) べき乗演算(**)

浮動小数点数はべき乗演算もサポートしており、記号は**です。ただし、負の数は小数のべき乗演算をサポートしていません。

>>> 1.2 ** 2
1.44
>>> 1.2 ** 2.3
1.5209567545525315
>>> -1.2 ** 2                       # -(1.2 ** 2)と等価
-1.44
>>> (-1.2) ** 2                     # 負の数の2乗は正の数
1.44
>>> (-1.2) ** 2.1                   # 負の数は小数のべき乗演算をサポートしていない
Traceback (most recent call last):  # 例外が投げられる
  File "<stdin>", line 1, in <module>
    ValueError: negative number cannot be raised to a fractional power

浮動小数点数のその他の演算

1) 浮動小数点数を近似的な2つの整数の商に変換する——as_integer_ratio()

これは浮動小数点数のメンバ関数です。使い方は以下の通りです。

>>> a = 0.1                                 # 操作数
>>> a.as_integer_ratio()
(3602879701896397, 36028797018963968)
>>> 3602879701896397.0 / 36028797018963968  # 両者の値はかなり近い
0.1


2) ある浮動小数点数が整数かどうかを判断する——is_integer()

これは浮動小数点数オブジェクトに付属している関数で、ある浮動小数点数が整数かどうかを判断します。使い方は以下の通りです。

>>> a = 12.0
>>> a.is_integer()
True
>>> a = 12.0001
>>> a.is_integer()
False


もちろん、これも近似値です。例えば、1.0000000000000001は1と見なされます。以下にこのようなケースを示します。

>>> 1.0000000000000001.is_integer()  # 整数として使用できるかどうかを判断
True
>>> 1.0000000000000001 == 1.0
True


post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。