float.as_integer_ratio()的实现限制

发布于 2021-01-29 18:05:01

最近,一位通讯员提到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
有马:3.14159265358979323846264338327569743
Wiki:3.14159265358979323846264338327950288

当然,考虑到64位浮点数提供的精度,结果是正确的,但是这使我提出了一个问题:我如何才能找到有关的实现局限性的更多信息as_integer_ratio()?感谢您的指导。

附加链接:Stern-Brocot树Python源

关注者
0
被浏览
53
1 个回答
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看