Есть ли чистая реализация python fractions.Fraction
, которая поддерживает long
s как числитель и знаменатель? К сожалению, возведение в степень, по-видимому, закодировано, чтобы вернуть float (ack !!!), который должен хотя бы поддерживать с помощью decimal.Decimal
.Фракции с десятичной точностью
Если нет, я полагаю, что, возможно, я могу сделать копию библиотеки и попытаться заменить вхождения float()
чем-то подходящим от Decimal
, но я бы предпочел что-то, что было проверено другими людьми раньше.
Вот пример кода:
base = Fraction.from_decimal(Decimal(1).exp())
a = Fraction(69885L, 53L)
x = Fraction(9L, 10L)
print base**(-a*x), type(base**(-a*x))
приводит к 0.0 <type 'float'>
где ответ должен быть очень небольшой десятичной.
Обновление: На данный момент у меня есть следующая работа (предполагая, что для ** b, что оба являются фракциями, конечно, мне понадобится другая функция, когда exp_ является поплавком или сам по себе десятичную дробь):
def fracpow(base, exp_):
base = Decimal(base.numerator)/Decimal(base.denominator)
exp_ = Decimal(exp_.numerator)/Decimal(exp_.denominator)
return base**exp_
, который дает ответ 4.08569925773896097019795484811E-516.
Мне все равно будет интересно, если есть лучший способ сделать это без дополнительных функций (я думаю, если я буду работать с классом Fraction
, я найду другие поплавки, которые будут работать в моих результатах).
Когда я делаю фракции. Фракция (11,17) ** 2 Я получаю фракции. Фракция (121, 289). Что вы получаете? –
Тип попытки (фракции. Фракция (11,17) ** 2.1) – Noah
ИМО, поведение, которое вы видите правильно, хотя и не то, что вы хотите.Поскольку показатель степени является float, разумно, что вещи преобразуются в float. Теперь, если показателем была фракция (21,10), это было бы более интересно ... –