Python:浮动(2 ** 53 + 3)将是什么

时间:2013-12-11 15:21:04

标签: python

我们知道python float number是64bit。我接受了测试:

float(2**53) is 9007199254740992.0, 

没关系

float(2**53+1) is also 9007199254740992.0, 

没关系,因为最后1个不能以64位二进制文​​件显示。

float(2**53+3) is equal to float(2**53+2), 

的结果
float(2**53+3) is **9007199254740996.0**

浮点数如何在python中运行?

3 个答案:

答案 0 :(得分:1)

我相信这是因为您处于默认的IEEE舍入模式"round to even"

也就是说,当在两个可表示的值之间精确舍入一个值时,选择的结果是有效数字的最后一位为0的结果。

在这种情况下,由于你失去了一点精度,这相当于“四舍五入到4的倍数”。

因此,值9007199254740995向可表示的值9007199254740996.0舍入,而不是同等值且可表示的值9007199254740994.0

同时,值90071992547409939007199254740992.0舍入,也不是9007199254740994.0

答案 1 :(得分:0)

请注意2**53+3int64,所以没有问题,如果你在python中评估它,它会给你正确的答案9007199254740995

但是,float64对于小数部分有52位,因此当您通过执行9007199254740995float64转换为float(2**53+3)时,您将失去精确度并四舍五入到附近号码:9007199254740996.0

答案 2 :(得分:0)

根据http://en.wikipedia.org/wiki/IEEE_floating_point IEEE标准,64位浮点数的精度为52位+ 1位符号。

这意味着任何需要超过52个有效位的数字都会四舍五入为52位有效位。

在你的情况下,你有53个有效位,这意味着最后一个被丢弃/舍入/某事。