代表1/10的Python

马丁·康尼

我知道以2为底的机器不能准确地表示某些以10为底的值,例如1/10。我已经看到了使用Python本身的示例在我的机器上:

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

为什么在这里准确地表示?

零比雷埃夫斯

从Python 2.7和3.1开始,Python使用最短的表示形式显示浮点数,该最短表示在求值时会产生相同的浮点数。文档中

Python现在使用David Gay的算法来查找不会更改其值的最短浮点表示形式。这应该有助于减轻围绕二进制浮点数的一些困惑。

用类似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即使这些表示可能暗示其他情况,仍然是这种情况

新算法取决于基础浮点实现中的某些功能。如果找不到所需的功能,则将继续使用旧算法。而且,文本pickle协议通过使用旧算法来确保跨平台的可移植性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Python中代表什么,代表什么

来自分类Dev

代表大量的Python

来自分类Dev

Python异常代表错误?

来自分类Dev

python中“../”代表什么路径?

来自分类Dev

Python:比较两个迭代表

来自分类Dev

Python:比较两个迭代表

来自分类Dev

python lambda / fn可以代表任意调用者吗?

来自分类Dev

从充满数组的Python字典到代表所有组合的字典

来自分类Dev

什么是数学公式中的mod代表并使用python

来自分类Dev

如何从代表列表的“绑定”变量中阻止python

来自分类Dev

Python FTP:“ TimeoutError:[Errno 110]连接超时”,但我可以在终端中与sftp连接

来自分类Dev

定义代表

来自分类Dev

斯威夫特代表。

来自分类Dev

代表颜色

来自分类Dev

[]代表什么?

来自分类Dev

〜$代表什么?

来自分类Dev

代表优势

来自分类Dev

代表-jQuery

来自分类Dev

等代表什么?

来自分类Dev

定义代表

来自分类Dev

NSViewController代表

来自分类Dev

$代表什么?

来自分类Dev

〜$代表什么?

来自分类Dev

如何用python解码代表utf-8的字符串?

来自分类Dev

将列表列表(代表边)中的数据加载到python中的igraph图中

来自分类Dev

Python / Plotly:如何使散点图上的每个数据点代表中间值?

来自分类Dev

如何处理python中的解析和树处理任务?(代表节奏)

来自分类Dev

从python中的n个点中找到代表折线的最低要求点

来自分类Dev

最后一行在此Python函数中代表什么?