繁体   English   中英

奇怪的编译器行为

[英]Strange compiler behavior

使用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,而测试包含正确的解决方案吗? 尽管我没有为此设置任何参数,但它与某些优化有关吗? 还是这确实是某种方式的错误?

5 / 9 = 0

0 * = 0

当您除以整数时,您会得到一个整数。 您只能说5.0 / 9 ,应该会好很多。

当您编写代码而没有得到期望的结果时,您的第一个倾向应该是“ 做错了什么?” 不是“编译器做错了什么?”

它可以帮助您在大多数时间寻找正确的位置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM