Как и для каждого из миллиарда других вопросов по SO, связанных с плавающей запятой :-), ответ таков: не все числа могут быть представлены точно.
И, даже если они могут быть представлены точно, вы можете получить плохой результат от чего-то вроде pow
, которое может работать в цикле. Другими словами, независимо от того, насколько мала ошибка операции, если вы делаете это много раз, ошибка становится большой.
Попробуйте распечатать возврат из pow(10,4)
с помощью %.50f
или другого спецификатора с плавающей запятой, и я гарантирую, что вы увидите что-то вроде 9999.9999999237623465
вместо 10000
.
Для чего бы то ни было, правильные результаты получаются в gcc 3.4.4 под CygWin, поэтому, вероятно, вы используете менее точную реализацию pow
.