≮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 #プログラミング を勉強中 !