Ограничения реализации float.as_integer_ratio ()

Недавно корреспондент упомянулfloat.as_integer_ratio(), новый в Python 2.6, отмечая, что типичные реализации с плавающей точкой являются по существу рациональными приближениями действительных чисел. Заинтригованный, я должен был попробовать π:

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

Я был слегка удивлен, чтобы не видеть большеточный результат из-заArima,:

(428224593349304L, 136308121570117L)

Например, этот код:

#! /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"

производит этот вывод:

python:  3.14159265358979311599796346854418516
Arima:   3.14159265358979323846264338327569743
Wiki:    3.14159265358979323846264338327950288

Конечно, результат правильный, учитывая точность, обеспечиваемую 64-битными числами с плавающей запятой, но это заставляет меня задаться вопросом: как я могу узнать больше об ограничениях реализацииas_integer_ratio()? Спасибо за любое руководство.

Дополнительные ссылки:Стерн-Броко а такжеИсходник Python.

Ответы на вопрос(3)

Ваш ответ на вопрос