float.as_integer_ratio()的实现限制
最近,一位通讯员提到float.as_integer_ratio()
了Python
2.6中的新增功能,指出典型的浮点实现本质上是实数的有理近似。出于好奇,我不得不尝试π:
>>> float.as_integer_ratio(math.pi);
(884279719003555L, 281474976710656L)
(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
有马:3.14159265358979323846264338327569743
Wiki:3.14159265358979323846264338327950288
当然,考虑到64位浮点数提供的精度,结果是正确的,但是这使我提出了一个问题:我如何才能找到有关的实现局限性的更多信息as_integer_ratio()
?感谢您的指导。
附加链接:Stern-Brocot树和Python源。