Фракции в питоне возвращают смехотворно большие числа

У меня есть код Python для решения некоторой рекурсии, и я хочу, чтобы он возвращал некоторые дроби.

Проблема в том, что мой код возвращает нелепые дроби (которые являются правильными), но они не являются наименьшими возможными дробями, я знаю это, поскольку могу просто решить формулу вручную.

Вот мой код:

from __future__ import division
import sys
from fractions import Fraction
def t(n):
    if n==0:
        return 0
    else:
        return 1/(4-t(n-1))

print(Fraction(t(int(sys.argv[1]))))

Если вы запустите этот код с python fraction.py 2 у вас должно быть 4/15, но вот что я получаю:

4803839602528529/18014398509481984

что численно правильно, я думаю, когда я просто вычисляю это, я получаю 0.26666666666666666 (возможно, обе фракции отличаются в x цифрах от 0).

В чем здесь проблема?

1 ответ

Решение

Преобразовать в Fraction объекты до того, как вы выполните математику, а не после

def t(n):
    n = Fraction(n)
    if n==0:
        return n
    else:
        return 1/(4-t(n-1))

Если вы делаете математику до преобразования в Fraction математика выполняется как математика с плавающей запятой, давая вам неточный результат, который затем вы конвертируете в неточный Fraction,

Если вы сначала преобразуетесь, то математика выполняется как дробная математика, и все остается точным.

Другие вопросы по тегам