2016-05-05 97 views
-1

我只是在用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,而测试包含了正确的解决方案?它是否与某些优化有关,尽管我没有为此设置任何参数?或者这在某种程度上是一个错误?

+0

Integer division !!! –

回答

2

5/9 = 0

0 *什么= 0

当你把为整数,你会得到一个整数回来。你可以说5.0/9,它应该会好很多。

当你正在编写代码而没有得到你所期望的,你的第一个倾向应该是“你做错了什么?”I做错了吗?不是“编译器做错了什么?”

它会帮助你在大多数时间看正确的地方。

+0

是的,指甲。谢谢! – Mark

+0

这是一个非常常见的错误..主要是为初学者,但它不时咬我。如果这解决了你的问题,请点击左边的复选框接受它作为答案。如果您认为这是一个很好的答案,您也可以点击向上箭头。 – xaxxon