Pergunta

Eu estou procurando uma maneira automatizada para transformar um valor decimal em uma fração na calculadora PARI / GP (gp). Por exemplo, eu quero transformar 0,759765625 para 389/512. Eu sei que posso fazer isso manualmente, digitando '759765625/10 ^ 9', mas eu gostaria de uma maneira mais fácil, como 'racionalizar (0,759765625);' iria trabalhar em Maxima.

Se ele não pode fazer isso diretamente, talvez haja uma função para contar o número de casas decimais? Então eu poderia levantar 10 para o resultado dessa função. (A função teria que contar levando casas decimais de 0s para ser útil.)

Foi útil?

Solução

Em pari-2.5, você pode usar bestappr (x) diretamente, sem especificar o adicional número de-dígitos argumento. Ele vai usar todos os dígitos disponíveis internamente:

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752

Outras dicas

Use o bestappr () função; para o exemplo dado, usar bestappr (0.759765625,10 ^ 9). (Resposta de cortesia da lista PARI / GP).

Este ainda tem a desvantagem de que o número de dígitos decimais devem ser especificados manualmente, mas isso pode ser superado: o segundo parâmetro para bestappr () pode ser feita uma grande potência de 10, maior do que o decimal mais longa que você nunca vai necessidade de "racionalizar".

Atenção:. Certifique-se de definir a precisão alta o suficiente antes de chamar bestappr, usando o comando \ p

Dois grandes maneiras de fazer isso:

a) uso lindep:

x=Pi;digits=7;l=lindep([x,1],digits);-l[2]/l[1]

b) o uso continuado fracções parando sempre que um quociente parcial grande é encontrado (a seguir, que fixa o limite de 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top