python做除法有不精确的尾数_Python等于浮点除法

使用

Python 3,以下内容如何返回True?

a = 2/3

b = 4/6

print(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的两倍,它几乎总是

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值