首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解浮点文档

理解浮点文档
EN

Stack Overflow用户
提问于 2014-06-30 18:24:38
回答 2查看 136关注 0票数 2

我正在阅读关于浮点问题和限制的Python。

大约在页的一半,上面写着:

有趣的是,有许多不同的十进制数有相同的最接近的近似二进制分数。例如,数字0.1、0.10000000000000001和0.1000000000000000055511151231257827021181583404541015625都近似为3602879701896397 /2 ** 55。由于所有这些十进制值都有相同的近似,所以可以在保持不变的eval(repr(x)) == x的同时显示它们中的任何一个。

特别是,它想说的是:

由于所有这些十进制值都有相同的近似,所以可以在保持不变的eval(repr(x)) == x的同时显示它们中的任何一个。

Python不是用15位以上的小数截断浮点数吗?有什么例子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-30 18:36:28

关键是,无论最初提供了多少位数,repr()的输出都是相同的,

代码语言:javascript
复制
>>> repr(0.1)
'0.1'
>>> repr(0.1000000000000000055511151231257827021181583404541015625)
'0.1'

那么,为什么它不为两者打印更长的版本呢?

代码语言:javascript
复制
# Hypothetically...
>>> repr(0.1)
'0.1000000000000000055511151231257827021181583404541015625'
>>> repr(0.1000000000000000055511151231257827021181583404541015625)
'0.1000000000000000055511151231257827021181583404541015625'

因此,有多种方法可以打印出相同的数字。Python使用dtoa()函数选择打印给定数字的最短方式,在本例中,最短的方式是0.1

0.1实际上不是精确的:确切的结果是更长的结果,但是当打印出来时,dtoa()会舍入这个数字,只要舍入的数字被舍入回原来的数字。换句话说,

代码语言:javascript
复制
float(repr(x)) == x

...even,尽管float()repr()都围绕着他们的论点。

票数 4
EN

Stack Overflow用户

发布于 2014-07-01 00:50:51

除了Dietrich Epp的出色答案之外,这个答案还专门解决了“Python不截断15位以上小数位浮点数吗?有例子吗?”。

考虑下面的Python会话:

代码语言:javascript
复制
$ python
Python 2.7.5 (default, Oct  2 2013, 22:34:09) 
[GCC 4.8.1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = 0.10000000000000001249000902703301107976585626602172851562500000000000000000000000000000000000000000000001
>>> x
0.10000000000000002
>>> y = 0.10000000000000001249000902703301107976585626602172851562500000000000000000000000000000000000000000000000
>>> y
0.1
>>> 

分配给xy的文字只有非常低的显着性数字--您可能需要滚动才能看到它--但是xy有不同的值。显然,如果Python基于15位小数截断,情况就不是这样了。

相反,它选择的是与十进制文字最接近的IEEE 64位二进制浮点数,将领带四舍五入到零最不重要的分数位。我选择y正好是两个可表示的数字之间的一半,但舍入。x只是稍微大一点,所以它就会变大。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24496539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档