Как говорит Чернослив, лучше избегать поплавков при работе с Fraction. И если вы хотите преобразовать свою дробь в десятичную без потери точности, вам нужно использовать числовой тип, например, десятичный, который имеет достаточную точность. Другой вариант - просто работать с целыми числами Python и увеличивать числитель с помощью достаточно большого множителя.
Ваш ряд находит сходящиеся к непрерывной дроби квадратного корня из двух. Если вы хотите перебрать все конвергенты, вы можете использовать алгоритм, показанный в ответе Чернослива. Но если вы хотите быстро вычислить sqrt (2) с большим количеством цифр, есть лучший способ, известный как метод Героя (или метод Герона). Это частный случай метода Ньютона для вычисления корней алгебраических уравнений. Вместо того, чтобы вычислять слагаемые для каждого i
в алгоритме Пруна 1 на 1, мы по существу удваиваем i
на каждой итерации, поэтому числитель и знаменатель очень быстро увеличиваются, удваивая точность ответа на каждой итерации цикла.
Вот короткая демонстрация, которая вычисляет sqrt (2) с точностью до 100 цифр. Обычно я делаю это, используя простые целые числа Python (или длинные целые числа в Python 2), но это также легко сделать с помощью дроби.
from __future__ import print_function
from fractions import Fraction as F
digits = 100
m = 10 ** digits
x = F(1, 1)
while x.denominator < m:
print(x)
x = x / 2 + 1 / x
print()
print(m * x.numerator // x.denominator)
выход
1
3/2
17/12
577/408
665857/470832
886731088897/627013566048
1572584048032918633353217/1111984844349868137938112
4946041176255201878775086487573351061418968498177/3497379255757941172020851852070562919437964212608
48926646634423881954586808839856694558492182258668537145547700898547222910968507268117381704646657/34596363615919099765318545389014861517389860071988342648187104766246565694525469768325292176831232
14142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727
Проверено на Python 2.6 и 3.6