Home » Python » Decimal型なら小数が近似値でないことをPythonで確認する

Decimal型なら小数が近似値でないことをPythonで確認する

動作検証バージョン:Windows 10 Pro(64-bit)+ Python 3.8.3(32-bit)

浮動小数点数がどのような値の近似値なのか確認するPythonのスクリプトを、ご紹介しました。

Decimal型の小数ならば近似値ではないことも、あわせて確認しておくと良さそうです。

[スポンサードリンク]

Decimalの整数を10で割り算した小数値を確認するサンプル

「0.1」から「0.9」までの、「0.1」ごとのDecimal型の小数がどのような値なのか、小数点以下16桁・17桁・18桁までを出力してみます。

import decimal

for i in range(1, 10):
    x = decimal.Decimal(i) / decimal.Decimal(10)
    print(f'{x:.16f}', f'{x:.17f}', f'{x:.18f}')

PythonでDecimal型を利用するには、decimalモジュールが必要であるため、最初にimportを行っています。
  import decimal

カウンター変数iが、1から9になるまでfor文を回して、
  for i in range(1, 10):

Decimal型に変換した変数iを、10で割り算して得られた小数を変数xに代入し、
      x = decimal.Decimal(i) / decimal.Decimal(10)

小数点以下16桁・17桁・18桁までf-stringを使って出力しています。
      print(f'{x:.16f}', f'{x:.17f}', f'{x:.18f}')

結果は以下のとおりです。

0.1000000000000000 0.10000000000000000 0.100000000000000000
0.2000000000000000 0.20000000000000000 0.200000000000000000
0.3000000000000000 0.30000000000000000 0.300000000000000000
0.4000000000000000 0.40000000000000000 0.400000000000000000
0.5000000000000000 0.50000000000000000 0.500000000000000000
0.6000000000000000 0.60000000000000000 0.600000000000000000
0.7000000000000000 0.70000000000000000 0.700000000000000000
0.8000000000000000 0.80000000000000000 0.800000000000000000
0.9000000000000000 0.90000000000000000 0.900000000000000000

文字列としての小数をDecimalに変換して確認するサンプル

文字列としての小数をDecimal型に変換した場合も、念のために確認しましょうか。

import decimal

for i in range(1, 10):
    x = decimal.Decimal('0.' + str(i))
    print(f'{x:.16f}', f'{x:.17f}', f'{x:.18f}')

先ほどのスクリプトとの違いは、変数xに代入する値の作成方法です。
先ほどは、割り算をしていましたが、
      x = decimal.Decimal(i) / decimal.Decimal(10)
こちらのスクリプトでは、文字列の「0.1」「0.2」「0.3」といった数字を作成して、Decimal型に変換しています。
      x = decimal.Decimal('0.' + str(i))

もちろん出力結果は同じです。

0.1000000000000000 0.10000000000000000 0.100000000000000000
0.2000000000000000 0.20000000000000000 0.200000000000000000
0.3000000000000000 0.30000000000000000 0.300000000000000000
0.4000000000000000 0.40000000000000000 0.400000000000000000
0.5000000000000000 0.50000000000000000 0.500000000000000000
0.6000000000000000 0.60000000000000000 0.600000000000000000
0.7000000000000000 0.70000000000000000 0.700000000000000000
0.8000000000000000 0.80000000000000000 0.800000000000000000
0.9000000000000000 0.90000000000000000 0.900000000000000000

最終更新日時:2021-06-25 06:21

[スポンサードリンク]

Home » Python » Decimal型なら小数が近似値でないことをPythonで確認する

「Python」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.