我在用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;
}
我用&#34; g ++ test.cpp -o test&#34;。
编译了这个这是该计划的输出:
$ ./test
Temperature in °F:
1000
Wrong: 1000 °F = 0 °C
Correct:1000 °F = 537.778 °C
有人可以向我解释为什么g ++(可重复地)将摄氏度计算为0,而测试包含正确的解决方案吗?它是否与某些优化有关,虽然我没有为此设置任何参数?或者这在某种程度上确实是一个错误?
答案 0 :(得分:2)
5 / 9
= 0
0 *任何= 0
当你除以整数时,你会得到一个整数。你可以说5.0 / 9
它应该好多了。
当你编写代码并且没有得到你期望的东西时,你的第一个倾向应该是&#34;什么dod 我做错了?&#34;不是&#34;编译器做错了什么?&#34;
它可以帮助你在大多数时间看到正确的地方。