Hat jemand so etwas gesehen? Kleine autarke Module sind bevorzugt.Pure Python rationale Zahlen Modul für 2,5
Antwort
Die fractions module von 2.6 kann bei Bedarf herausgerissen werden. Ergreifen Sie fractions.py, numbers.py und abc.py; alle reinen Python-Module.
Sie können die einzelnen Dateien von hier (2.6 Zweig, 2.7 nicht funktioniert): http://hg.python.org/cpython/branches
SymPy ist eine symbolische Mathematikbibliothek, die vollständig in Python geschrieben ist und volle Unterstützung für rationale Zahlen bietet. Vom tutorial:
>>> from sympy import *
>>> a = Rational(1,2)
>>> a
1/2
>>> a*2
1
>>> Rational(2)**50/Rational(10)**50
1/88817841970012523233890533447265625
Es gibt auch für Python GMP (GMPY), die zwar nicht reiner Python, wahrscheinlich effizienter ist.
Danke. SymPy's Rational ist nett, wenn es ein wenig zu eng mit anderen Teilen der Bibliothek verbunden ist. – Constantin
Eine weitere Sache ist in Python 2.5 Wartung Zweig Rat.py von Demo-Ordner zu versuchen. Wenn ich richtig verstehe, ist es der Papa von 2.6 fractions
. Es ist ein einzelnes Modul ohne Abhängigkeiten.
>>> from Rat import rat
>>> rat(1)/rat(3)
Rat(1,3)
>>> rat(1, 3) ** 2
Rat(1,9)
UPDATE: Nein, ist fractions.py
etwa 2,5-mal schneller für meine Aufgabe.
Stimmt, ich dachte, es wäre viel schwieriger! – Constantin
Hinweis: Dies scheint im allgemeinen Fall nicht zu funktionieren. Beispiel: fractions.Fraction (10) * 10 => Attribut Fehler: 'int' Objekt hat kein Attribut 'Zähler'. int-Objekte scheinen in Python 2.6 einen Zähler zu haben, in Python 2.5 jedoch nicht. Ich würde gerne wissen, wie andere mit diesem Problem umgehen (ich habe meine Literale gezwungen, Brüche zu sein, bevor ich Operatoren einsetze). – benno
Ein besserer Workaround besteht darin, die Definitionen von 'forward' und 'reverse' in der Funktion '_operator_fallbacks' zu ändern, um int und long korrekt zu behandeln. Im Kommentar aufgrund der begrenzten Formatoptionen schwer zu beschreiben, aber etwas wie: "elif isinstance (b, (int, lang)): return monomorphic_operator (a, Fraktion (b)" – benno