Есть ли способ рационализировать десятичное число в пари /GP?
Я ищу автоматический способ преобразования десятичного значения в дробь в калькуляторе PARI/GP (gp). Например, я хочу превратить 0,759765625 в 389/512. Я знаю, что могу сделать это вручную, набрав "759765625/10^9", но я бы хотел более простой способ, например "рационализировать (0.759765625);" будет работать в Максима.
Если он не может сделать это напрямую, может быть, есть функция для подсчета количества десятичных знаков? Тогда я мог бы поднять 10 до результата этой функции. (Функция должна считать начальные десятичные разряды 0, чтобы быть полезной.)
3 ответа
В pari-2.5 вы можете использовать bestappr(x) напрямую, без указания дополнительного аргумента количества цифр. Он будет использовать все доступные внутри цифры:
? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752
Используйте функцию bestappr(); для данного примера используйте bestappr(0,759765625,10^9). (Ответ любезно предоставлен списком рассылки PARI/GP.)
Это по-прежнему имеет тот недостаток, что число десятичных цифр нужно указывать вручную, но это можно преодолеть: второй параметр для bestappr() может иметь очень большую степень 10, большую, чем самая длинная десятичная цифра, которая вам когда-либо понадобится ". рационализации".
Внимание: убедитесь, что вы установили достаточно высокую точность перед вызовом bestappr, используя команду \ p.
Два отличных способа сделать это:
а) использовать lindep
:
x=Pi;digits=7;l=lindep([x,1],digits);-l[2]/l[1]
б) использовать непрерывные дроби, останавливаясь всякий раз, когда встречается большой частный коэффициент (ниже, я установил предел в 1000):
x=Pi;maxquot=1000;p0=0;p1=1;q0=1;q1=0;a=floor(x);while(a<maxquot,p2=a*p1+p0;q2=a*q1+q0;p0=p1;p1=p2;q0=q1;q1=q2;x=1/frac(x);a=floor(x));p1/q1