2016-03-31 4 views
-4

特別なケースでは、私は2つの変数(プログラムが実行されている間に変更されているので、何が入っているのか分かりません)の数字は0.068404です。数字マイナス自体が無限に与えます

私がそれ自身で引くとき、それはpower-9で無限または正確に数字を与えます。すべてのブール演算は私に間違った結果を与えます。

アイデア?

+0

これは非常にゼロに近い浮動小数点表現です。それは無限ではない、それはちょうど非常に小さいです。あなたが参照している「-9」は「10^-9」であり、数値の科学的表記です。 –

+0

浮動小数点数を比較しないでください。浮動小数点は[不正確です](https://isocpp.org/wiki/faq/newbie#floating-point-arith) – PaulMcKenzie

+0

しかし、0にする必要があります、それは変です! 0と1の間の数値でベクトルの長さを変えないと、それは動作します。 – Render

答えて

3

浮動小数点の丸めの問題が発生している可能性があります。これは非常に一般的な問題で、時間と時間をもう一度処理しています。あなたが0 1のプリントアウトを取得する必要があり、すべての権利では

float a, b, c; 

cin >> a; 
b = a; 
a = a*3; 
a = a/3; 
c = a - b; 
cout << c << " " << (c == 0) << endl; 

が、あなたはそれhereをしようとすると、次のプログラムを考えてみましょう。あなたが得る:

2.48353e-09 0 

浮動小数点数は、すべてのベース10番号を表すことができないので、丸め誤差がまっすぐ比較悪い考えを作るためです。あなたはいつもすなわち、イプシロンを使用する必要があります:epsが1E-6のようなものである

abs(a - b) < eps 

Here you can find many more examples.

+0

ありがとう!初めて私はこの問題を5年間で扱っています。もう一度ありがとう – Render

+0

@Render質問はあなたがこれについて詳述しない限り閉じられます。あなたは具体的な例を提示し、この答えを受け入れるべきです。 –

関連する問題