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, π:
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 .
Der von as_integer_ratio
verwendete Algorithmus berücksichtigt Potenzen von 2 im Nenner . Hier ist ein (wahrscheinlich) besserer Algorithmus .
Ich empfehle gmpy
die Implementierung von Stern-Brokotbaum :
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! -)
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.