Большинство людей назвали бы это epsilon
и использовали бы delta
для cuberoot**3 - num
.
К концу вы надеетесь, что это выражение,
cuberoot = (high + low)/2
купит вам примерно еще один бит точности в вашем ответе на каждую итерацию.
(Рядом с началом каждый раз приблизительно сокращается количество битов ошибок пополам.)
Вы жалуетесь, что IEEE-754 double имеет ограниченную точность при вычислении кубов, а также различия.
Пятьдесят три бита дают вам почти шестнадцать десятичных цифр, и ваш эпсилон равен 1e-14
.
Но, как вы обнаружили, ввод num
длиной в несколько цифр сожрет у вас на полях.
Для более точных вычислений вы можете использовать Десятичное число .
Или загляните в библиотеку gmp .
Вы верите, что выполняется некоторый инвариант цикла,
что величины cuberoot
и cuberoot ** 3
будут меняться на каждой итерации.
Это просто проверить.
Просто назначьте их временным переменным и убедитесь, что они меняются.
Завершите цикл раньше, если они этого не сделают.
В более общем смысле, чтобы обнаружить колебания между несколькими ограничивающими значениями, поместите предыдущие значения в set
и завершите работу рано, увидев повторяющееся значение.