Я просто поразил странное поведение при компиляции небольшой C++-программы с g ++ (4.6.3). Сравните два поплавка по Цельсию и тест:Странное поведение компилятора
#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;
}
Я составил это всего лишь «г ++ test.cpp -o тест».
Это выход из программы:
$ ./test
Temperature in °F:
1000
Wrong: 1000 °F = 0 °C
Correct:1000 °F = 537.778 °C
Может кто-нибудь объяснить мне, почему г ++ делает (воспроизводимо) вычисляют по Цельсию до 0, в то время как тест содержит правильное решение? Имеет ли это какое-то отношение к некоторой оптимизации, хотя я не задавал никаких аргументов для этого? Или это действительно ошибка в некотором роде?
Целое подразделение !!! –