Implementierungseinschränkungen von float.as_integer_ratio ()

9

Kürzlich erwähnte ein Korrespondent float.as_integer_ratio() , neu in Python 2.6, dass typische Gleitkomma-Implementierungen im Wesentlichen rationale Näherungen reeller Zahlen sind. Fasziniert, ich musste versuchen, π:

%Vor%

Ich war leicht überrascht, wegen genaue Ergebnis zu sehen .wikipedia.org / wiki / Arima_Yoriyuki "> Arima ,:

%Vor%

Zum Beispiel dieser Code:

%Vor%

erzeugt diese Ausgabe:

%Vor%

Sicher ist das Ergebnis angesichts der Genauigkeit, die 64-Bit-Fließkommazahlen bieten, korrekt, aber ich frage: Wie kann ich mehr über die Implementierungsbeschränkungen von as_integer_ratio() erfahren? Danke für jede Anleitung.

Zusätzliche Links: Stern-Brocot-Baum und Python-Quelle .

    
trashgod 16.01.2010, 05:19
quelle

4 Antworten

3

Der von as_integer_ratio verwendete Algorithmus berücksichtigt Potenzen von 2 im Nenner . Hier ist ein (wahrscheinlich) besserer Algorithmus .

    
Victor Liu 16.01.2010, 05:24
quelle
3

Ich empfehle gmpy die Implementierung von Stern-Brokotbaum :

%Vor%

wieder, das Ergebnis ist "korrekt innerhalb der Genauigkeit von 64-Bit-Floats" (53-Bit "so genannte" Mantissen ;-), aber:

%Vor%

... gmpys Genauigkeit ist so viel billiger (in Bezug auf die Summe der Zähler- und Nennerwerte) als bei Arima, viel weniger Python 2.6! -)

    
Alex Martelli 16.01.2010 05:28
quelle
3

Sie erhalten bessere Näherungen mit

%Vor%

Fraktionen sind seit Version 3.0 enthalten. Allerdings hat math.pi nicht genug Genauigkeit, um eine 30-stellige Näherung zurückgeben zu können.

    
fesno 16.01.2010 09:54
quelle
1

Gehen Sie durch das Quellen-Repository für Python, finden Sie heraus, wer den Code von Interesse verordnet hat, und senden Sie eine E-Mail an ihn.

    
Ignacio Vazquez-Abrams 16.01.2010 05:21
quelle

Tags und Links