2012-05-13 6 views

答えて

1

あなたは近似が9.0で表示される値を意味している二元系で小数点表現を浮動8.

得る内部にまで切り詰め9未満とことであった理由である、あなたの値を切り捨て例えば8

In [19]: i = 3.1 
In [20]: print '%d' %i 
3 

In [21]: i = 3.4 
In [22]: print '%d' %i 
3 

In [23]: i = 3.7 
In [24]: print '%d' %i 
3 

In [25]: i = 3.9999 
In [26]: print '%d' %i 
3 

This Wikipeadia物品がそう提供これらの収量の全て浮動小数点表示に関する追加の背景。

5

浮動小数点演算は本質的に不正確です。 Python計算では、通常、倍精度に計算が実行されます。あなたの数値は倍精度に正確に表現できないので、丸め誤差の影響を受けます。私のマシンではresult8.9999999999999929です。

>>> result = (((1.7526 % 0.3048)/0.3048) * 12) 
>>> result 
8.9999999999999929 
>>> print result 
9.0 
>>> int(result) 
8 

あなたはそれが9.0に丸められます値、未満9.0resultに保存されている実際の値を印刷します。したがって、resultを整数に変換すると、8に切り捨てられます。

重要な問題は値の表現可能性です。 1.75260.3048も、Pythonインタプリタで簡単に見られるように、倍精度で正確に表現できません。

>>> 1.7526 
1.7525999999999999 
>>> 0.3048 
0.30480000000000002 

ストーリーの道徳は、浮動小数点値を使用するときに正確な算術演算を期待するべきではないということです。このトピックについての具体的な議論は、What Every Computer Scientist Should Know About Floating-Point Arithmeticです。

関連する問題