我只是在用g ++(4.6.3)编译一个小的C++程序时遇到了一个奇怪的行为。比较两个浮点摄氏度和测试:奇怪的编译器行为
#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 test”。
这是程序的输出:
$ ./test
Temperature in °F:
1000
Wrong: 1000 °F = 0 °C
Correct:1000 °F = 537.778 °C
有人能向我解释为什么g ++一样(可重复)计算摄氏度至0,而测试包含了正确的解决方案?它是否与某些优化有关,尽管我没有为此设置任何参数?或者这在某种程度上是一个错误?
Integer division !!! –