浮動小数点処理
Pythonは浮動小数点フォーマットを使用して、以下の問題が発生しました.
質問する
2つのエラーを比較しましたが、どちらも違います.
Pythonは浮動小数点で誤りを表現し、浮動小数点は誤りを正確に表現できないという問題がある.浮動小数点で誤りを表すと,小数点以下は無限に繰り返されるため,一定時間で四捨五入して近似値を求める.実際の値と近似値から生じる誤差を浮動小数点切り込み誤差(rounding error)と呼ぶ.この誤差は、マシンε(マシンε/sys.float info.epsilonに格納された値/切り込み誤差の上限)よりも常に小さい.したがって、比較エラーの場合は、計算値と比較値の違いを求めてから、マシンユーティリティより小さいか等しいかを判断する必要があります.以下であれば、2つのエラーの値が値であると判断できます.
方法
1.math、sys関数は内蔵関数ではなく、importコマンドを使用してモジュールを読み込みます.
2. math.fabs()を使用して2つの値の差を絶対値に設定すると、負の値が出ても正常に判断できます.
3.絶対値と機器実績値の比較
上記の機能を持つ数学.isclose()関数を使用して判断します.
round関数(四捨五入)を使用して、小数点を特定の位置に比較します.
10進数モジュールのDecimalを使用して、正確な小数点以下の桁数を10進数で表します.
質問する
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
Reference
この問題について(浮動小数点処理), 我々は、より多くの情報をここで見つけました https://velog.io/@nameunzz/부동소수점처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol