【发布时间】:2020-08-04 07:19:20
【问题描述】:
我有一个机器学习模型,它输出直到小数点后一位的概率(即 0.0、0.1、0.2、... 1.0)
写循环时
for i in np.arange(0,1.1,0.1)
if p >= i:
print('yes for i = %f' % i)
else:
print('no for i = %f' % i)
但问题是np.arange 为三个值输出了一个轻微的数字错误:
0.3变成0.30000000000000004:
0.6 变成 0.6000000000000001:
0.7 变成 0.7000000000000001
当p=0.6时,这将导致输出
没有 i = 0.6000000000000001
我该如何规避这个问题?
【问题讨论】:
-
这能回答你的问题吗? Is floating point math broken?
-
@Keldorn:OP 的问题是如何解决它,而不是它为什么会发生,但您链接上的一些答案包含解决方案。 numpy floating point comparison 的问题可能就在附近,尽管在某些情况下答案不如您的链接有用。
-
@Andris OP 的问题是基于一个错误的前提。 0.3 没有变成 0.30000000000000004,没有 0.3 开头。这是由于对浮点运算的误解。看起来主持人同意了,因为问题已作为重复关闭。
-
我知道浮点表示,但 scitkit 学习模型将其作为一个值返回,所以当某些值不可表示时,它们首先是如何返回的?