Limitaciones de implementación de float.as_integer_ratio ()

Recientemente, un corresponsal mencionadofloat.as_integer_ratio(), nuevo en Python 2.6, observando que las implementaciones típicas de punto flotante son esencialmente aproximaciones racionales de números reales. Intrigado, tuve que probar π:

>>> float.as_integer_ratio(math.pi);
(884279719003555L, 281474976710656L)

Me sorprendió un poco no ver máspreciso resultado debido aArima,,

(428224593349304L, 136308121570117L)

Por ejemplo, este código:

#! /usr/bin/env python
from decimal import *
getcontext().prec = 36
print "python: ",Decimal(884279719003555) / Decimal(281474976710656)
print "Arima:  ",Decimal(428224593349304) / Decimal(136308121570117)
print "Wiki:    3.14159265358979323846264338327950288"

produce esta salida:

python:  3.14159265358979311599796346854418516
Arima:   3.14159265358979323846264338327569743
Wiki:    3.14159265358979323846264338327950288

Ciertamente, el resultado es correcto dada la precisión que ofrecen los números de punto flotante de 64 bits, pero me lleva a preguntar: ¿Cómo puedo averiguar más sobre las limitaciones de implementación deas_integer_ratio()? Gracias por cualquier orientación.

Enlaces adicionales:Stern-Brocot Tree yFuente de pitón.

Respuestas a la pregunta(3)

Su respuesta a la pregunta