2008-11-30 6 views

Antwort

9

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

+0

Stimmt, ich dachte, es wäre viel schwieriger! – Constantin

+0

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

+0

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

8

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.

+0

Danke. SymPy's Rational ist nett, wenn es ein wenig zu eng mit anderen Teilen der Bibliothek verbunden ist. – Constantin

2

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.