数字比较相等,因为58682.7578125可以在32位和64位浮点中精确表示.让我们仔细看看二进制表示:
32 bit: 01000111011001010011101011000010
sign : 0
exponent: 10001110
fraction: 11001010011101011000010
64 bit: 0100000011101100101001110101100001000000000000000000000000000000
sign : 0
exponent: 10000001110
fraction: 1100101001110101100001000000000000000000000000000000
它们具有相同的符号,相同的指数和相同的分数 – 64位表示中的额外位用零填充.
无论他们演出哪种方式,他们都会比较平等.如果您尝试使用其他数字,例如58682.7578124,您会看到二进制级别的表示形式不同; 32位失去更高的精度,他们不会比较相等.
(在二进制表示中也很容易看到float32可以向上传播到float64而不会丢失任何信息.这就是numpy在比较两者之前应该做的事情.)
import numpy as np
a = 58682.7578125
f32 = np.float32(a)
f64 = np.float64(a)
u32 = np.array(a, dtype=np.float32).view(dtype=np.uint32)
u64 = np.array(a, dtype=np.float64).view(dtype=np.uint64)
b32 = bin(u32)[2:]
b32 = '
最后
以上就是阔达星星最近收集整理的关于python中float32_python – Numpy的float32和float比较的全部内容,更多相关python中float32_python内容请搜索靠谱客的其他文章。
发表评论 取消回复