Есть ли способ рационализировать десятичное число в пари /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
Другие вопросы по тегам