Фракции в питоне возвращают смехотворно большие числа
У меня есть код 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
,
Если вы сначала преобразуетесь, то математика выполняется как дробная математика, и все остается точным.