g ++(4.6.3)で小さなC++プログラムをコンパイルすると、ちょっと変わった動作が発生しました。 2つのfloat摂氏とテストの比較:奇妙なコンパイラの振る舞い
#include <iostream>
using namespace std;
int main() {
float fahrenheit = 0;
float celsius = 0;
float test = 0;
cout << "Temperature in °F: " << endl;
cin >> fahrenheit;
celsius = 5/9 * (fahrenheit - 32);
test = 5 * (fahrenheit - 32)/9;
cout << "\nWrong:\t" << fahrenheit << " °F = " << celsius << " °C" << endl;
cout << "Correct:" << fahrenheit << " °F = " << test << " °C" << endl;
}
私はちょうど「G ++ます。test.cpp -oテスト」でこれをコンパイルしました。
これは、プログラムの出力です:テストは正解が含まれているのに対し、G ++(再現性)、0に摂氏を計算しない理由
$ ./test
Temperature in °F:
1000
Wrong: 1000 °F = 0 °C
Correct:1000 °F = 537.778 °C
は、誰かが私に説明できますか?私はそれについて何も設定していませんでしたが、いくつかの最適化とは何か関係がありますか?あるいはこれは本当に何らかの形でバグですか?
整数部! –