У вас нет значащих цифр, кроме нулей, если вы сделаете это 54 раза. Следовательно, рационализация, как вы делаете (которая просто сохраняет битовый паттерн), дает то, что вы видели.
InputForm[n53 = Nest[Sqrt, 10., 53]]
Из [180] // InputForm =
1,0000000000000002
InputForm[n54 = Nest[Sqrt, 10., 54]]
Out [181] // InputForm =
1.
Rationalize[n53, 0]
4503599627370497/4503599627370496
Rationalize[n54, 0]
Out [183] = 1
Для любопытных: проблема не в потере точности в смысле деградации с вычислением итераций. Действительно, повторение этих квадратных корней на самом деле увеличивает точность. Это можно увидеть с помощью ввода bignum.
InputForm[n54 = Nest[Sqrt, 10.`20, 54]]
Out [188] // InputForm =
1.0000000000000001278191493200323453724568038240908339267044`36.25561976585499
Вот актуальная проблема. Когда мы используем машинные номера, то после 54 итераций в результирующей машинной двойке не будет значимых цифр, кроме нулей. То есть причиной является ограничение по размеру для чисел.
Причина не слишком загадочная. Назовите полученное значение 1 + eps. Тогда мы получим (1 + eps) ^ (2 ^ 54), равное (чтобы приблизить приближение) к 10. Разложение второго порядка тогда показывает, что eps должен быть меньше, чем машинный эпсилон.
InputForm[epsval =
Первый [Выберите [
EPS /. N [Решить [Сумма [eps ^ j * Бином [2 ^ 54, j], {j, 2}] == 9, eps]],
Head [#] === Real && #> 0 &]]]
Из [237] // InputForm =
+1,864563472253985 * ^ - 16
$MachineEpsilon
Out [235] = 2,22045 * 10 ^ -16
Даниэль Лихтблау
Wolfram Research