У меня есть сомнения относительно вывода следующей программы на C. Я попытался скомпилировать его, используя как Visual С++ 6.0, так и MinGW32 (gcc 3.4.2).
#include <stdio.h>
int main() {
int x = 2147483647;
printf("%f\n", (float)2147483647);
printf("%f\n", (float)x);
return 0;
}
Вывод:
2147483648.000000
2147483647.000000
Мой вопрос: почему обе линии разные? Когда вы конвертируете целочисленное значение 2147483647 в формат с плавающей запятой IEEE 754, оно приближается к 2147483648.0. Итак, я ожидал, что обе линии будут равны 2147483648.000000.
EDIT. Значение "2147483647.000000" не может быть значением с плавающей запятой с одной точностью, поскольку номер 2147483647 не может быть представлен точно в плавающей точке IEEE 754 с плавающей точкой формат без потери точности.