执行计算以显示Python具有53位精度

2024-05-08 13:14:23 发布

您现在位置:Python中文网/ 问答频道 /正文

有谁能提供一些指导,说明如何用Python进行简单的计算,以粗略地证明该语言实现了符合ieee754的53位精度?除了这件事,我在这里没什么可谈的。我尝试过使用0.1+0.2的典型例子,但没有成功。在


Tags: 证明语言精度例子指导典型粗略地ieee754
3条回答
>>> for i in range(100):
    x = 2**i
    if float(x) == float(x + 1):
        print(i)
        break

53

这是因为x是一个整数,并且在Python中整数的位范围是无限的。在

计算epsilon,使1.0 + eps == 1.0

from itertools import count
eps = 1.0
for bits in count():
    if 1.0+eps == 1.0:
        break
    eps *= 0.5

再加上第三个例子。在

在ieee754中,无穷定义为将所有指数位设置为1 所有尾数都归零。带负片 无穷大,符号位也设为1。这意味着只有零位将属于尾数。在

import struct

def float_bin(f):
    "as bin function, but converts floats to their binary representation"
    bytes_ = struct.pack("d", f)
    format_ = "{:08b}" * len(bytes_)
    binary = format_.format(*bytes_[::-1])
    return binary

mantissa_bits = float_bin(float("-inf"))
# mantissa_bits == "1111111111110000000000000000000000000000000000000000000000000000"
print(mantissa_bits.count("0")) # prints 52... (rather than 53)

最后一点在哪里?ieee754明确地为尾数指定了53位,但只存储了52位。这是因为尾数的前导部分是隐含的。 所有用科学记数法表示的数字必须以 非零位数。例如,0.123 * 10^5无效。相反,正确的表示是1.23 * 10^4。 然而,由于二进制中只有一个非零位,所以这个位只能取一个值。因此,显式地存储此位将是一种浪费。意思是,对于53位尾数,您只需要存储52位。在

相关问题 更多 >