特別なケースでは、私は2つの変数(プログラムが実行されている間に変更されているので、何が入っているのか分かりません)の数字は0.068404です。数字マイナス自体が無限に与えます
私がそれ自身で引くとき、それはpower-9で無限または正確に数字を与えます。すべてのブール演算は私に間違った結果を与えます。
アイデア?
特別なケースでは、私は2つの変数(プログラムが実行されている間に変更されているので、何が入っているのか分かりません)の数字は0.068404です。数字マイナス自体が無限に与えます
私がそれ自身で引くとき、それはpower-9で無限または正確に数字を与えます。すべてのブール演算は私に間違った結果を与えます。
アイデア?
浮動小数点の丸めの問題が発生している可能性があります。これは非常に一般的な問題で、時間と時間をもう一度処理しています。あなたが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
。
ありがとう!初めて私はこの問題を5年間で扱っています。もう一度ありがとう – Render
@Render質問はあなたがこれについて詳述しない限り閉じられます。あなたは具体的な例を提示し、この答えを受け入れるべきです。 –
これは非常にゼロに近い浮動小数点表現です。それは無限ではない、それはちょうど非常に小さいです。あなたが参照している「-9」は「10^-9」であり、数値の科学的表記です。 –
浮動小数点数を比較しないでください。浮動小数点は[不正確です](https://isocpp.org/wiki/faq/newbie#floating-point-arith) – PaulMcKenzie
しかし、0にする必要があります、それは変です! 0と1の間の数値でベクトルの長さを変えないと、それは動作します。 – Render