浮動小数点処理


Pythonは浮動小数点フォーマットを使用して、以下の問題が発生しました.
質問する
2つのエラーを比較しましたが、どちらも違います.
0.1  +  0.2  ==  0.3  # false
0.1  +  0.2           # 0.30000000000000004
解決策
Pythonは浮動小数点で誤りを表現し、浮動小数点は誤りを正確に表現できないという問題がある.浮動小数点で誤りを表すと,小数点以下は無限に繰り返されるため,一定時間で四捨五入して近似値を求める.実際の値と近似値から生じる誤差を浮動小数点切り込み誤差(rounding error)と呼ぶ.この誤差は、マシンε(マシンε/sys.float info.epsilonに格納された値/切り込み誤差の上限)よりも常に小さい.したがって、比較エラーの場合は、計算値と比較値の違いを求めてから、マシンユーティリティより小さいか等しいかを判断する必要があります.以下であれば、2つのエラーの値が値であると判断できます.
方法
1.math、sys関数は内蔵関数ではなく、importコマンドを使用してモジュールを読み込みます.
2. math.fabs()を使用して2つの値の差を絶対値に設定すると、負の値が出ても正常に判断できます.
3.絶対値と機器実績値の比較
import math, sys
x =  0.1  +  0.2
math.fabs(x -  0.3)  # <= sys.float_info.epsilon
>>> True
方法
上記の機能を持つ数学.isclose()関数を使用して判断します.
import math

math.isclose(0.1  +  0.2,  0.3)
>>>True
方法
round関数(四捨五入)を使用して、小数点を特定の位置に比較します.
round(0.1+0.2,  1)  ==  round(0.3,  1)  #round(값, 표현할 자릿수)
>>> True
方法
10進数モジュールのDecimalを使用して、正確な小数点以下の桁数を10進数で表します.
from decimal import Decimal
Decimal('0.1')  +  Decimal('0.2')  ==  Decimal('0.3')
>>> True