ここではかなり不安定な問題が発生しています。 私はx value
を0.0 to 1.0
から、0.05
に増やしたいと思っています。C++ <=演算子が動作していないようです
これはかなり怠惰なことです。しかし、私のループの最後にと評価したときx <= L (with x = 1.0 and L = 1.0)
私は0 value
を得る。
また、L
と書いてみました。は、動作が変更されません。コードの最後で
std::ofstream& operator<<(std::ofstream& ofs, Solver& s) {
double x = 0.0;
double L = 1.0;
while(x <= L){
//Do stuff related to my project
x += 0.05;
}
std::cout << "x= : " << x << std::endl;// 1
std::cout << "L= : " << L << std::endl;// 1
std::cout << "(x <= L)= : " << (x <= L) << std::endl;// 0
std::cout << "(1 <= L)= : "<< (1 <= L) << std::endl;//1
std::cout << "(1.0 <= L)= : "<< (1.0 <= L) << std::endl;//1
std::cout << "(x <= 1)= : "<< (x <= 1) << std::endl;//0
std::cout << "(x <= 1.0) : "<< (x <= 1.0) << std::endl;//0
std::cout << "(1.0 <= 1)= : "<< (1.0 <= 1) << std::endl;//1
}
return ofs;
}
あなたは、私が行ってきたいくつかの印刷試験を見ることができます。
通常はこれらのすべてのテストの結果は1
である必要があります。
どのように、なぜテストが合格しないのか、誰もが知っていますか?
これは[浮動小数点数学が壊れています]のように閉じられました(https://stackoverflow.com/questions/588004/is-floating-point-math-broken)これは浮動小数点数ではないため再オープンしました。 **を閉じると投票する前に**の質問と私の答えをお読みください – bolov
[浮動小数点ループの可能な複製より多くの反復が実行される可能性があります](https://stackoverflow.com/questions/20001912/floating-point-loop-runs -more-it-should-be-be) –
@RaymondChenこれはまた、精度についてのものです。この問題は**精度とは関係ありません**。すべてのdouble/floatをポストの 'int'に置き換えれば、同じ問題が発生します。 – bolov