Поскольку точность значения с плавающей запятой одинарной точности (32 бита) составляет около 7 цифр после десятичной точки. Это означает, что добавляемое вами значение практически равно нулю, по крайней мере, при добавлении к 1
. Однако само значение может быть легко сохранено в плавающей запятой, поскольку показатель степени в этом случае мал. Но чтобы успешно добавить его к 1
, необходимо использовать показатель степени большего числа ... и затем цифры после нулей исчезают при округлении.
Вы можете использовать double
, если вам нужна большая точность. С точки зрения производительности это не должно иметь значения для современного оборудования, и память часто также не столь ограничена, что вам приходится думать о каждой отдельной переменной.
РЕДАКТИРОВАТЬ: Поскольку вы заявили, что использование double
не вариант, вы можете использовать суммирование Кахана , как указано akuhn в комментарии.
Другим вариантом может быть выполнение промежуточных вычислений с двойной точностью, а затем снова приведение к float
. Это поможет, однако, только когда есть несколько больше операций, чем просто добавление очень маленького числа к большему.