import numpy as np
a = 58682.7578125
print(type(a), a)
float_32 = np.float32(a)
print(type(float_32), float_32)
print(float_32 == a)
印刷品:
^{pr2}$
我完全理解比较浮点数的相等性不是一个好主意,但这不应该是错误的(我们讨论的是小数点后第一位的差异,而不是0.00000001)?是否依赖于系统?这种行为有记录吗?在
编辑:这是第三位小数:print(repr(float_32), repr(a))
# 58682.758 58682.7578125
但我能相信repr?这些最终是如何存储在内部的?在
编辑2:人们坚持认为用更精确的方法印刷浮子峎32,会给我它的表现力。不过,正如我已经根据nympy的docs评论的那样:the % formatting operator requires its arguments to be converted to standard python types
以及:print(repr(float(float_32)))
印刷品58682.7578125
@MarkDickinsonhere给出了一个有趣的见解,显然{}应该是忠实的(然后他说它对{}不忠诚)。在
因此,让我重申我的问题如下:在这个例子中,我如何得到float_32和a的精确内部表示法?如果这些都一样,那么问题解决了如果不是
在比较python的float和np.float32时,上下转换的确切规则是什么?我猜它会将float_32转换为float,尽管@WillemVanOnsem建议in the comments这是相反的
我的python版本:Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32