Python Numba在32位限制下崩溃
在我使用@njit decorator的代码中,有一行:Python Numba在32位限制下崩溃,python,python-3.8,numba,Python,Python 3.8,Numba,在我使用@njit decorator的代码中,有一行: average_distance=d/(n**4) 有趣的是,n^4==2^32,我得到了错误 ZeroDivision错误:被零除 我只是假设这是由于一个溢出,一旦达到32位限制,它就会滚到0。 有办法解决这个问题吗?我对numba很陌生,所以我不知道该如何应对。 完整代码示例: @timer @njit(nogil=True) def split_method(n): d=0 for x in range(n):
average_distance=d/(n**4)
有趣的是,n^4==2^32,我得到了错误
ZeroDivision错误:被零除
我只是假设这是由于一个溢出,一旦达到32位限制,它就会滚到0。
有办法解决这个问题吗?我对numba很陌生,所以我不知道该如何应对。
完整代码示例:
@timer
@njit(nogil=True)
def split_method(n):
d=0
for x in range(n):
for y in range(n):
p1x=x/n
p1y=y/n
for x2 in range(n):
for y2 in range(n):
p2x=x2/n
p2y=y2/n
d+=((p1x-p2x)**2 + (p1y-p2y)**2)**(1/2)
average_distance=(d/(n**4))
return average_distance
你就不能用64位整数吗?我以前从来没有这样做过。我如何用这种方式改变一个整数?你需要提供一个完整的例子,这个方法闻起来像是你可以得到它的解析解——在任何情况下,它的缓存都很简单,所以你可以在它上面加一个
@lru\u cache()
,我无法重现这个错误(Python 3.8,Numba 0.53.1)。当没有提供显式签名时,Numba类型取决于传递给函数的参数。如果n
是一个int,那是因为您正在向函数传递一个int。您可以将n
转换为average_distance=d/float(n)**4中的浮点。