パラメータで使用するとwhileループの条件に「適合」しないfmod()に問題があります。下のスニペットを再作成しました。これは私のメインプログラムと同じエラーを引き起こします。Fmod While Whileループ条件エラー
#include <math.h>
int main()
{
double foo = 223.76;
double bar = foo;
while(fmod(bar,1.00) != 0)
{
bar += foo;
}
cout << bar << endl;
}
上記のコードは、最終的に5594を停止して印刷する必要がありますが、代わりに数百万個に達します。各ステップでbarの値を印刷すると、実際には5594の値に達していることがわかります(テストする場合は約25ステップかかります)。なぜそれが停止しないのかわかりません。
不正確な値と、正確な数との比較を繰り返すと、浮動小数点プログラミングのCardinal Sinsが繰り返されます。これは決してそのまま動作しません。すべてを100倍して簡単に解決してください。 –
'223.76'は、2のべき乗の倍数であれば、(通常のC++実装で)正確に表現することができますか? –
さて、私はそれを0.00と比較しました。結果はいずれの場合も同じ結果に終わった。 –