計算結果を変数に代入して出力しようとした。ただし、割り当てられている変数のタイプによっては結果が異なります。しかし、予期せぬ結果は、この特定の計算の特定の値に対してのみ発生しました。C++ intまたはdoubleに割り当てられた同じ計算結果が異なるが、特定の値のみである(C++では64.02のマジックナンバー?)
int main() {
// anything above 64.02 give unexpected results
// e.g. (100.02 - 100.0) * 100.0
int a ((64.02 - 64.0) * 100.0);
double b ((64.02 - 64.0) * 100.0);
cout<<"result: "<<a<<endl; // result: 1, expected result: 2
cout<<"result: "<<b<<endl; // result: 2, expected result: 2
// anything below 64.02 give right results
int c ((63.02 - 63.0) * 100.0);
double d ((63.02 - 63.0) * 100.0);
cout<<"result: "<<c<<endl; // result: 2, expected result: 2
cout<<"result: "<<d<<endl; // result: 2, expected result: 2
return 0;
}
この質問は非常に具体的ですが、暗黙の型キャストと関係があると思われます。しかし、なぜ値> = 64.02の場合のみですか?
これは、スタックオーバーフローに関する私の最初の質問です。
64.01を試しましたか? – nicomp
はい、64.01はintとdoubleの両方に期待される結果を示しました。何か<64.02が期待した結果を出しました... –
結果はどうだと思いますか、結果はどうなっていますか? – nicomp