Frage

Ich suche nach einer automatisierten Art und Weise einen Dezimalwert in eine Fraktion in dem PARI / GP-Rechner (gp) zu drehen. Zum Beispiel möchte ich 0,759765625 in 389/512 einzuschalten. Ich weiß, ich kann dies durch die Eingabe manuell tun ‚759765625/10 ^ 9‘, aber ich würde einen einfacheren Weg, wie, wie ‚rationalize (0,759765625);‘ würde in Maxima arbeiten.

Wenn es dies nicht direkt tun kann, vielleicht gibt es eine Funktion, um die Anzahl der Dezimalstellen zu zählen? Dann könnte ich 10 bis das Ergebnis dieser Funktion erhöhen. (Die Funktion müsste Dezimalstellen von 0s zählen führende nützlich zu sein.)

War es hilfreich?

Lösung

In Pari-2.5 können Sie verwenden bestappr (x) direkt, ohne die zusätzliche Angabe Nummer-of-Ziffern Argument. Es wird alles intern zur Verfügung Stellen verwenden:

? bestappr(Pi)
%1 = 17004845848539028973023/5412810546621363616752

Andere Tipps

Mit der bestappr () Funktion; für das Beispiel gegeben, verwendet bestappr (0.759765625,10 ^ 9). (Antwort mit freundlicher Genehmigung von der PARI / GP-Mailingliste.)

Dies hat noch den Nachteil, dass die Anzahl der Dezimalstellen muss manuell angegeben werden, aber diese überwunden werden können: der zweite Parameter auf bestappr () kann eine sehr große Leistung von 10 gemacht werden, größer ist als die längste dezimal werden Sie jemals müssen "rationalisieren".

Achtung: Stellen Sie sicher, dass die Präzision hoch genug einzustellen vor dem Aufruf bestappr, die \ p Befehl mit

.

Zwei große Möglichkeiten, es zu tun:

a) verwenden lindep:

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

b) Fraktionen fortgesetzte Nutzung durch Anhalten, wenn ein großer Teilquotienten (unten gestoßen wird, fixiert I den Grenzwert bis 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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top