Числа с плавающей запятой в большинстве архитектур (в которых используется представление IEEE754 ) могут представлять только те числа, которые имеют конечное двоичное расширение , т. Е. Которые точно представлены числом, таким как 11.00100100001
(а длина строки ограничена размером типа с плавающей запятой, например, 53 для double
).
Любое число, которое не имеет этой формы, то есть не является конечной суммой степеней двух, например, 1/3 или 1/5 или 1/10, может никогда быть точно выраженным как такая переменная с плавающей точкой.
Поскольку пользователи часто вводят такие значения, как 0.1
, а не более подходящие 0.125
, такая потеря точности часто встречается довольно рано в таких настройках, как ваши. Умножение на эту вашу константу - это один из способов, который автор на своей платформе нашел для того, чтобы приблизиться к тому, что, как он думал, предназначал пользователь. Это все субъективно, хотя. Если вы просто печатаете с короткой точностью, printf("%0.5f", x)
, вы не должны замечать отсутствие точности.