Итак, у меня есть следующий код:
#include <iostream>
int main(){
float number = 0.6;
int anotherNumber = 20;
int value = (int) ((float) anotherNumber * number);
std::cout << value;
std::cin.get();
}
Это дает 12, как и должно быть, учитывая 20 * 0,6 = 12. Однако, если я изменю все числа с плавающей запятой на удваиваемые:
#include <iostream>
int main(){
double number = 0.6;
int anotherNumber = 20;
int value = (int) ((double) anotherNumber * number);
std::cout << value;
std::cin.get();
}
Это дает мне 11 вместо этого.И что еще более странно, если я изменю код так, чтобы значение сохранялось сначала в переменной, а затем в регистре после, это снова дает правильный ответ (12).
#include <iostream>
int main(){
double number = 0.6;
int anotherNumber = 20;
double intermediate = (double) anotherNumber * number;
int value = (int) intermediate;
std::cout << value;
std::cin.get();
}
Что во имя Богаздесь происходит?Я использую g ++ 4.5.3 для компиляции.