首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >表示1/10的Python

表示1/10的Python
EN

Stack Overflow用户
提问于 2015-02-17 06:54:55
回答 1查看 157关注 0票数 1

我知道基2机器不能准确地表示某些基数10的值,例如1/10。我见过示例使用Python本身。在我的机器上:

代码语言:javascript
运行
复制
Python 2.7.8 (default, Oct 18 2014, 12:50:18) 
[GCC 4.9.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 1.0/10
0.1

为什么这里准确地表示了它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-17 07:04:55

从Python2.7和3.1开始,Python使用最短的表示来显示浮点数,在计算时得到相同的浮点数。来自文档

Python现在使用David的算法来查找不改变其值的最短浮点表示。这将有助于缓解围绕二进制浮点数的一些混淆。 像1.1这样的数字在二进制浮点中没有精确的等价值,这很容易看出它的意义。因为没有精确的等价,所以像float('1.1')这样的表达式的计算结果是最接近的可表示值,即0x1.199999999999ap+0 (十六进制)或1.100000000000000088817841970012523233890533447265625 (十进制)。这个最近的值过去和现在仍然用于随后的浮点计算。 新的是数字的显示方式。以前,Python使用了一种简单的方法。计算repr(1.1)值为format(1.1, '.17g'),计算值为'1.1000000000000001'。使用17位数字的优点是它依赖于IEEE-754的保证,以确保eval(repr(1.1))将完全回到它原来的价值。缺点是许多人认为输出令人困惑(将二进制浮点表示的内在限制误认为是Python本身的一个问题)。 repr(1.1)的新算法更聪明,并返回'1.1'。有效地,它搜索所有等价的字符串表示(以相同的底层浮点值存储的字符串表示)并返回最短的表示形式。 新算法在可能的情况下倾向于发出更清晰的表示,但它不会改变底层值。因此,1.1 + 2.2 != 3.3仍然是一种情况,尽管表示形式可能会提出相反的建议。 新算法依赖于底层浮点实现中的某些特征。如果找不到所需的特征,则将继续使用旧的算法。同时,利用原有的算法,保证了跨平台的可移植性.

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

https://stackoverflow.com/questions/28556302

复制
相关文章

相似问题

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