Всех приветствую.
При написании программы по
алгоритму Andrey A столкнулся с необходимостью раскладывать некое вещественное число (точнее квадратный корень из него если это чем-то поможет) в цепную дробь, а также получать из неё
подходящие (
вики называет их так) дроби в виде

. Порыскав по документации к PARI/GP нашёл функции
contfrac для первого и
contfracpnqn для второго. Засада с ними в том что они требуют точного указания числа членов разложения, а мне в программе было бы удобнее (и быстрее!) раскладывать итерационно, получая член за членом и останавливаясь когда станет достаточно (пока не знаю как это заранее оценить). Делать разложение руками невыгодно, слишком медленно (на порядок).
Потому вопрос номер раз: нет ли готовой встроенной функции для разложения числа в цепную дробь рекурентно/итерационно? Возможно я что-то не нашёл или не понял в доке.
Вопрос номер два: а как попроще получить (понятно что примерно) исходное вещественное число из заданной цепной дроби? Руками собирать обратно это извращение, пока могу лишь натравить на неё
contfracpnqn и взять любое приближение. Нет ли способа проще и быстрее?
Вопрос номер три:
Код:
? \p
realprecision = 28 significant digits
? contfrac(sqrt(176),2)
%1 = [13, 3]
? contfrac(sqrt(176),3)
%2 = [13, 4]
? contfrac(sqrt(176),4)
%3 = [13, 3, 1, 3]
? contfrac(sqrt(176),5)
%4 = [13, 3, 1, 3, 26]
? contfrac(sqrt(176),6)
%5 = [13, 3, 1, 3, 26, 3]
Почему вместо трёх элементов функция вернула лишь два?! Нет, понятно, что-то там с округлением, но почему не вернула
![$[13,3,1]$ $[13,3,1]$](https://dxdy-01.korotkov.co.uk/f/0/5/d/05dcdfd9bc159de61966797aab18bc2482.png)
, оно же равно
![$[13,4]$ $[13,4]$](https://dxdy-04.korotkov.co.uk/f/b/a/c/bacd4f00c72d8a784c28ba932c1ec62e82.png)
? Это просто мрак!
