Domanda

Sto cercando un metodo automatico per trasformare un valore decimale in una frazione nella PARI / GP calcolatrice (gp). Per esempio, io voglio trasformare ,759,765625 millions in 389/512. So che posso fare questo manualmente digitando '759.765.625 decimi ^ 9', ma mi piacerebbe un modo più semplice, come 'razionalizzare (,759,765625 millions);' avrebbe funzionato in Maxima.

Se non può farlo direttamente, forse c'è una funzione per contare il numero di cifre decimali? Poi ho potuto raccogliere 10 al risultato di tale funzione. (La funzione dovrebbe contare leader cifre decimali di 0 per essere utile.)

È stato utile?

Soluzione

In pari-2.5, è possibile utilizzare bestappr (x) direttamente, senza specificare l'extra il numero-di-cifre argomento. Si userà tutte le cifre disponibili internamente:

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752

Altri suggerimenti

Utilizza il bestappr () la funzione; per l'esempio fornito, utilizzare bestappr (0.759765625,10 ^ 9). (Risposta per gentile concessione del / GP mailing list PARI.)

Questa ha ancora lo svantaggio che il numero di cifre decimali deve essere specificato manualmente, ma questo può essere superato: il secondo parametro a bestappr () può essere fatta una grande potenza di 10, più grande della decimale più lunga si potrà mai bisogno di "razionalizzazione".

Attenzione: assicurarsi di impostare la precisione abbastanza alto prima di chiamare bestappr, usando il comando \ p

.

Due grandi modi di farlo:

a) usare lindep:

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

b) utilizzare le frazioni continuato interrompendo ogni volta che viene rilevato un grande quoziente parziale (di seguito, ho fissato il limite a 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top