[英]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.