я написал этот код, чтобы вычислить непрерывную дробь рационального числа N, используя алгоритм Евклида:Python 2.7 - продолжение Фракции Expansion - Понимание ошибки
from __future__ import division
def contFract(N):
while True:
yield N//1
f = N - (N//1)
if f == 0:
break
N = 1/f
Если говорить N является 3,245 функция никогда не заканчивается, как, по-видимому F никогда не равна 0. первый 10 членов разложения являются:
[3,0, 4,0, 12,0, 3,0, 1,0, +247777268231,0, 4,0, 1,0, 2,0, 1,0]
Что явно ошибка, поскольку фактическое расширение только:
[3; 4,12,3,1] или [3; 4,12,4]
Что вызывает проблема здесь? Это какая-то ошибка округления?
Я не понимаю, что вы остановились, 'N // 1' не эквивалентно' N' т.е. 3.223 // 1 = 3. – ggordon
Опять же я не вижу вашу точку, если я используйте 'int (N)' вместо 'N // 1' Я получаю ту же ошибку. С 'N = 1/f' я пытаюсь получить обратную f, а не использовать разделение полов. Если я печатаю 1/f для первых 10 расширений, я получаю: '4.08163265306 12.25 4.0 1.0 2.47777268231e + 11 4,73320814676 1,36386918834 2,74824038982 1,33646888567 2.97204301075' – ggordon
Ах, хорошо, я вижу вашу точку сейчас had't еще не видел изменения в свой пост – ggordon