2008-11-30 9 views

Respuesta

9

El fractions module de 2.6 se puede arrancar si es necesario. Toma fracciones.py, numbers.py y abc.py; todos los módulos puros de python.

Usted puede obtener los archivos individuales de aquí (2.6 rama, 2.7 no funciona): http://hg.python.org/cpython/branches

+0

Es cierto, ¡pensé que sería mucho más difícil! – Constantin

+0

Nota: Esto no parece funcionar en el caso general. Por ejemplo: fracciones. Fracción (10) * 10 => Error de atributo: el objeto 'int' no tiene atributo 'numerador'. Los objetos int parecen tener un numerador en Python 2.6, pero no en Python 2.5. Me interesaría saber cómo otros trabajaron alrededor de este problema (obligué a mis literales a ser fracciones antes de usar operadores). – benno

+0

Una mejor solución es cambiar las definiciones de 'forward' e 'reverse' en la función '_operator_fallbacks' para manejar correctamente int, y long. Difícil de describir en el comentario debido a las opciones de formato limitado, pero algo así como: "elif isinstance (b, (int, long)): return monomorphic_operator (a, Fraction (b)" – benno

8

SymPy es una biblioteca de matemática simbólica escrita completamente en Python y tiene soporte completo para números racionales. Desde el tutorial:

>>> from sympy import * 
>>> a = Rational(1,2) 

>>> a 
1/2 

>>> a*2 
1 

>>> Rational(2)**50/Rational(10)**50 
1/88817841970012523233890533447265625 

También hay GMP para Python (GMPY) que, aunque no Python puro, es probablemente más eficiente.

+0

Gracias. SymPy's Rational es agradable, aunque un tanto entrelazado con otras partes de la biblioteca. – Constantin

2

Una cosa más que intentar es Rat.py de la carpeta de demostración en Python 2.5 rama de mantenimiento. Si entiendo correctamente, es el padre de 2.6 fractions. Es un módulo único sin dependencias.

>>> from Rat import rat 
>>> rat(1)/rat(3) 
Rat(1,3) 
>>> rat(1, 3) ** 2 
Rat(1,9) 

ACTUALIZACIÓN: No, fractions.py es aproximadamente 2,5 veces más rápido para mi tarea.

Cuestiones relacionadas