2017-07-08 2 views
4

私は浮い数があることを理解し、コンピュータで扱う彼らのlimitationsので、これは期待することができます。どのように浮遊しているエラーが

>>> 0.1 + 0.2 == 0.3 
False 

をしかし、なぜこれが有効なのですか?コンピュータは0.45、0.55 reliablyのいずれかを正しく保存できませんか?

>>> 0.45 + 0.55 == 1.00 
True 

最初のケースのコンピュータでは、その不正確さを修正できなかったし、後でそれを修正することができませんでした。

+2

@cᴏʟᴅsᴘᴇᴇᴅ:この質問はリンクされた質問とは異なるようです。もう一つは、不平等(時には)が起こる理由を尋ねる。この質問は、なぜ、どのような条件下で起こるのか、時には起こらないのかを質問します。 –

+1

@RoryDault私は見る...大丈夫です。後退する。また、OP、これを見てください:https://www.h-schmidt.net/FloatConverter/IEEE754.html –

答えて

4

ご存知のように、ほとんどの小数点は正確には格納できません。それは1.0を除いて上記の数字すべてに当てはまります。

しかし、それらは高精度で保存されます。 0.3の代わりに、非常に近い表現可能な数が使用されます。それは非常に近いだけでなく、最も近い数字です。

0.1 + 0.2を計算すると、別の表現可能な数値が計算されます。これもまた、0.3に非常に近くなります。あなたは「不運」であり、最も近い表現可能な数字とは異なります。

実際の運が含まれていません。0.10.2の両方がわずかに大きい数字で表されます。追加すると、2つのエラーが同じ記号のように追加され、0.30000000000000004のようなものが得られます。

0.45 + 0.55の場合、エラーの兆候が異なり、キャンセルされます。

+0

私は不運になる可能性があるケースについてもっと詳しく展開できますか?それは私がもっと理解するのを助けるでしょう。 –

関連する問題