Python 在具有浮点边界的区间内查找整数时的舍入问题
我有一个代码,它执行以下操作。在某些循环中,它求解二次不等式(ax^2+bx+c0)并在根之间找到整数(使用我自己的函数Python 在具有浮点边界的区间内查找整数时的舍入问题,python,floating-point,integer,Python,Floating Point,Integer,我有一个代码,它执行以下操作。在某些循环中,它求解二次不等式(ax^2+bx+c0)并在根之间找到整数(使用我自己的函数integer\u-inside) 但是,在最后一种情况下,np.root([1,-9,20])正式返回数组([5,4.]),但integer\u In返回一个空数组。如果您检查: >>> np.roots([1, -9, 20]) == np.array([5., 4.]) array([False, False]) 这是因为在引擎盖下np.根([1,-9
integer\u-inside
)
但是,在最后一种情况下,np.root([1,-9,20])
正式返回数组([5,4.])
,但integer\u In
返回一个空数组。如果您检查:
>>> np.roots([1, -9, 20]) == np.array([5., 4.])
array([False, False])
这是因为在引擎盖下np.根([1,-9,20])
返回数组([4.000000000000001,4.999999999999])
当然,里面没有整数
第一个想法是使用np.round()
。但这意味着我必须记住它,并将np.round()
放在代码中进行相应计算的任何地方。其次,选择哪种精度也不明显
这个问题是不可避免的,还是有其他通用的python解决方案?按如下方式调用numpy函数如何:
np.roots([1, -9, 18]).astype(int)
Out:
[6 3]
这样可以确保函数的输出始终为整数形式。除非您仍然希望访问浮点值,但这应该不是问题,因为您可以将np.root的输出存储到变量中,并在需要时应用“.astype(int)”
val = np.roots([1, -9, 18])
print("val: ", val)
print("val_int: ", val.astype(int))
Out:
val: [6. 3.]
val_int: [6 3]
不幸的是,这没有多大帮助,因为我的目标不是让整数输出为
np.root()
,而是在这个输出中找到整数。请看我问题中的第一个示例。@user7647857,哦,好吧,我不好,我现在明白了,我假设问题出在numpy函数的输出上。在这种情况下,我会问您是否可以在函数中为您的integer\u提供代码
val = np.roots([1, -9, 18])
print("val: ", val)
print("val_int: ", val.astype(int))
Out:
val: [6. 3.]
val_int: [6 3]