我意识到新罕布什尔群岛()函数可用于安全检查浮点数是否相等。不过,目前让我困惑的是,使用标准的<;=运算符会得到不同的结果。例如:
add_to = 0.05
value64 = np.float64(0.3) + add_to*4
value32 = np.float32(0.3) + add_to*4
threshold = 0.5
print('is close?')
print(np.isclose(value64, threshold))
print(np.isclose(value32, threshold))
print('is less than or equals to?')
print(value64 <= threshold)
print(value32 <= threshold)
给了我
^{pr2}$有人对此有合理的解决办法吗?我认为一个选择可能是重载python比较运算符的numpy浮点,并且(在该函数中)将两个浮点取整到小数点后8位。但这是在一个速度有点重要的情况下,这感觉有点麻烦。在
提前感谢您的帮助!在
根据这个Difference between Python float and numpy float32,python对}的看法是不同的。如果您实际检查
np.float32
和{value64
和value32
的中间值,您将看到:这就解释了}。在
print(value32 <= threshold)
计算结果为false的原因。由于二进制错误,我怀疑四舍五入到小数点后八位是否安全,就像value32
一样,您将得到{您还应该考虑到,取整一个数字所需的时间绝对很小,而且仍然必须用于
^{pr2}$因为它的计算结果是}时会出现错误。如果使用
0.30000000000000004
,因此在使用>=
或{decimal
库,也会发生此错误。简而言之,有些数字是你无法避免的。我所知道的绕过这一切的唯一办法就是绕圈。在我试着用舍入和不舍入的方法测试了一堆组合,结果太快了,我无法记录10000次迭代的时间差,所以除非你交易股票或训练神经网络数周,否则你不需要担心舍入一个数字。在
如果您担心将数字舍入到何处的任意性,我会在一个有效数字后面搜索一个长度大于4的
0
字符串,然后在那里将其截断。在您可以定义将}组合的函数。在
<
和>
与{它们类似于},只是它们也使用
<=
和{np.isclose()
来测试相等性。在相关问题 更多 >
编程相关推荐