半分、小数で、すなわち0.5、正確なバイナリ表現を有している:私はそれを整数に丸めた場合0.10.5(小数)の丸めが正確でないのはなぜですか?
それにもかかわらず、私は同じように動作れ、PythonとCで試行0の代わりに1を得ます。例えば。 Pythonコード:
>>> a,b,c = 0.49, 0.5, 0.51
>>> [round(x) for x in (a,b,c)]
[0, 0, 1]
>>> "%.0f %.0f %.0f" % (a,b,c)
'0 0 1'
興味深いことに、
>>> a,b,c = 0.049, 0.05, 0.051
>>> [round(x,1) for x in (a,b,c)]
[0.0, 0.1, 0.1]
>>> "%.1f %.1f %.1f" % (a,b,c)
'0.0 0.1 0.1'
私は、例えば、多くの同様の質問を認識していPython rounding error with float numbers、Python tutorial on floating point arithmetics、および義務的なWhat Every Computer Scientist Should Know About Floating-Point Arithmeticである。
数値に(10進数)0.5などの正確なバイナリ表現がある場合は、正しく丸めてはいけませんか?
編集:問題は、バージョン3.4.3で発生したが、バージョン2.7.6
は、私はそれらの結果を得ることはありません - 私は0、1、1.使用しているのPythonのバージョンは何、そしてどのようなプラットフォーム上を参照してください? –
「0.5」は正確なバイナリ表現「0.05」を持っていませんが、 –
質問には既に回答済みです:http://stackoverflow.com/questions/10825926/python-3-x-rounding-behavior – HelloWorld