Он не работает вечно по той простой причине, что числа с плавающей запятой не идеальны.
В какой-то момент, k
станет достаточно большим, так что добавление 1 к нему не будет иметь никакого эффекта.
В этот момент k
будет равен k+1
, и ваш цикл завершится.
Числа с плавающей запятой могут различаться по одной единице, только когда они находятся в определенном диапазоне.
В качестве примера предположим, что у вас есть целочисленный тип с точностью до 3 десятичных цифр для положительного целого числа и показатель с одним десятичным знаком.
При этом вы можете идеально представить числа от 0 до 999 как 000x10 0 до 999x10 0 (поскольку 10 0 равно 1):
Что происходит, когда вы хотите представлять 1000? Вам нужно использовать 100x10 1 . Это по-прежнему отображается отлично.
Однако, существует нет точного способа представления 1001 с помощью этой схемы, следующее число, которое вы можете представить, это 101x10 1 , что равно 1010.
Таким образом, когда вы добавляете 1 к 1000, вы получите ближайшее совпадение, равное 1000.