Python等于浮点除法

Python等于浮点除法,第1张

概述使用 Python 3,以下内容如何返回True? a = 2/3b = 4/6print(a == b) 我有一个算法,需要排序一个数字列表,每个数字的形式为x / y,其中x和y是整数. (y!= 0). 我担心分裂的数值精度会导致上述情况的不稳定性和任意排序. This being an example of relevant comments.但是,根据示例和更大的整数,它似乎不是一个 使用 Python 3,以下内容如何返回True?

a = 2/3b = 4/6print(a == b)

我有一个算法,需要排序一个数字列表,每个数字的形式为x / y,其中x和y是整数. (y!= 0).

我担心分裂的数值精度会导致上述情况的不稳定性和任意排序. This being an example of relevant comments.但是,根据示例和更大的整数,它似乎不是一个问题.

Python是否从b的分子和分母中删除了公因子2,并保留a和b不仅仅是浮点数的信息?

解决方法 Python遵循 IEEE 754浮点规范.*(64位)IEEE浮点数基本上是基数2 scientific notation的一种形式,细分如下:

>一位符号(正面或负面)
>尾数或有效数的53位,包括隐含的前导.
>指数的11位.

将浮点值乘以或除以2,或任何2的幂,只影响指数,而不影响尾数.**因此,它通常是一个相当“稳定”的运算,所以2/3应该产生与4/6相同的结果.但是,IEEE浮动仍然存在以下问题:

>大多数 *** 作不是关联的(例如,(a * b)* c!= a *(b * c)).
>更复杂的 *** 作不需要正确舍入(但是,正如蒂姆·彼得斯指出的那样,除法当然不是“更复杂”的 *** 作并且将被正确舍入).***
>中间结果总是四舍五入为53位.

您应该准备好处理这些问题并假设大多数在数​​学上等效的浮点表达式不会产生相同的值.具体来说,在Python中,您可以使用math.isclose()来估计两个浮点数是否“足够接近”以“可能是相同的值”.

*实际上,这是一个谎言. Python遵循C的两倍,它几乎总是以某种方式遵循IEEE 754,但在充分奇特的架构上可能会偏离它.在这种情况下,C标准提供很少或没有保证,因此您必须查看您的体系结构或编译器的浮点文档.

**如果指数不上溢或下溢.如果确实如此,那么您通常会分别使用适当签名的无穷大或零,或者您可能会根据体系结构和/或Python的编译方式下载到denormal number.

***“更复杂” *** 作的确切集合因IEEE 754 made a lot of operations optional while still demanding precision而有所不同.因此,给定 *** 作是符合IEEE 754还是仅符合众所周知的宽松C标准很少是显而易见的.在某些情况下, *** 作可能不符合任何标准.

总结

以上是内存溢出为你收集整理的Python等于浮点除法全部内容,希望文章能够帮你解决Python等于浮点除法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1194053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存