Я не понимаю вывод следующей программы:
int main()
{
float x = 14.567729f;
float sqr = x * x;
float diff1 = sqr - x * x;
double diff2 = double(sqr) - double(x) * double(x);
std::cout << diff1 << std::endl;
std::cout << diff2 << std::endl;
return 0;
}
Вывод:
6.63225e-006
6.63225e-006
Я использую компилятор VS2010, x86.
Я ожидаю получить другой вывод
0
6.63225e-006
Почему diff1
не равно 0?
Для вычисления sqr - x * x
компилятор увеличивает точность чисел с плавающей запятой до удвоения. Почему?