Python Numba在32位限制下崩溃

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):

在我使用@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):
        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中的浮点。