見出し画像

≮Python≯ 十進固定浮動小数点数 decimal (追記 ⤑ math.fsum )

十進固定浮動小数点数 decimal

とりあえず、これで誤差が出なくて True になる事だけ覚えとこ。。。

>>> from decimal import *
>>> sum([Decimal('0.1')]*10) == Decimal('1.0')
True
>>> sum([0.1]*10) == 1.0
False


§追記§

これでも誤差が出なくて True になる事も覚えとこ。。。

>>> import math
>>> math.fsum([0.1]*10) == 1.0
True

math.fsum(iterable)
iterable 中の値の浮動小数点数の正確な和を返します。複数の部分和を追跡することで精度のロスを防ぎます:
>>>
>>> sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
0.9999999999999999
>>> fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1])
1.0
アルゴリズムの正確性は、 IEEE-754 演算の保証と、丸めモードが偶数丸め (half-even) である典型的な場合に依存します。Windows 以外のいくつかのビルドでは、下層の C ライブラリが拡張精度の加算を行い、時々計算途中の和を double 型へ丸めてしまうため、最下位ビットが消失することがあります。



#Decimal
#decimal
#math
#fsum
#Chromebook 上の #Linux#Python #Python3 #プログラミング を勉強中 !