Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当在计算中使用大量数字时,Python Numba模块给了我一个错误的答案_Python_Numba - Fatal编程技术网

当在计算中使用大量数字时,Python Numba模块给了我一个错误的答案

当在计算中使用大量数字时,Python Numba模块给了我一个错误的答案,python,numba,Python,Numba,当我运行此代码时 from numba import jit A,B,C,D = [int(i) for i in input().split()] @jit() def Z (A,B,C,D): X = (A**B)*(C**D) print(X) return X Z(A, B, C, D) 如果我输入值2887966146040760308478041 209676100616,它返回0,这是不对的。问题是,对于数字的整数表示,可以表示的内容有上限和下限 在下面的

当我运行此代码时

from numba import jit
A,B,C,D = [int(i) for i in input().split()]
@jit()
def Z (A,B,C,D):
    X = (A**B)*(C**D)
    print(X)
    return X
Z(A, B, C, D)

如果我输入值2887966146040760308478041 209676100616,它返回0,这是不对的。

问题是,对于数字的整数表示,可以表示的内容有上限和下限

在下面的类型签名中,您可以看到,当我输入这些数字时,编译器将A和C分配给32位整数,最大值约为20亿,将B和D分配给64位整数,最大值为1.84*10^19

X也是一个64位整数,但您试图表示的数字太大,无法包含,因此它不会返回准确的结果

您可以查看编译器分配给.inspect\u类型的类型,或者在您的情况下查看Z.inspect\u类型


问题是,对于数字的整数表示,可以表示的内容有上限和下限

在下面的类型签名中,您可以看到,当我输入这些数字时,编译器将A和C分配给32位整数,最大值约为20亿,将B和D分配给64位整数,最大值为1.84*10^19

X也是一个64位整数,但您试图表示的数字太大,无法包含,因此它不会返回准确的结果

您可以查看编译器分配给.inspect\u类型的类型,或者在您的情况下查看Z.inspect\u类型


这是一个巨大的数字。你知道你想要什么答案吗?不知道为什么你会感到惊讶。前半个**B有4万亿位,需要1.6TB的内存来存储。你需要运用常识。这种计算可以用模运算,但不能用整数或浮点运算。这些都是非常大的数字,如果类型应该是int,它将溢出。您可以使用Z.inspect检查类型签名_types@TimRoberts存储起来不需要那么多内存,它只是一个数字表示…@Wade我不知道你的意思。这个数字需要13万亿位。你打算如何在不使用13万亿位的情况下表示它?这是一个巨大的数字。你知道你想要什么答案吗?不知道为什么你会感到惊讶。前半个**B有4万亿位,需要1.6TB的内存来存储。你需要运用常识。这种计算可以用模运算,但不能用整数或浮点运算。这些都是非常大的数字,如果类型应该是int,它将溢出。您可以使用Z.inspect检查类型签名_types@TimRoberts存储起来不需要那么多内存,它只是一个数字表示…@Wade我不知道你的意思。这个数字需要13万亿位。您打算如何在不使用13万亿位的情况下表示它?值得指出的是,在python中,整数可以是任意大的,这就是为什么如果有足够的可用内存,纯python中的结果可能是正确的。值得指出的是,在python中,整数可以是任意大的,这就是为什么如果有足够的可用内存,纯python中的结果可能是正确的。
Z (int32, int64, int32, int64)
--------------------------------------------------------------------------------
# File: C:\Users\wade.roberts\PycharmProjects\workspace\numba_workspace.py
# --- LINE 6 --- 

@jit()

# --- LINE 7 --- 

def Z(A, B, C, D):

    # --- LINE 8 --- 
    # label 0
    #   A = arg(0, name=A)  :: int32
    #   B = arg(1, name=B)  :: int64
    #   C = arg(2, name=C)  :: int32
    #   D = arg(3, name=D)  :: int64
    #   $0.3 = A ** B  :: int64
    #   del B
    #   del A
    #   $0.6 = C ** D  :: int64
    #   del D
    #   del C
    #   X = $0.3 * $0.6  :: int64
    #   del $0.6
    #   del $0.3

    X = (A ** B) * (C ** D)

    # --- LINE 9 --- 
    #   $0.8 = global(print: <built-in function print>)  :: Function(<built-in function print>)
    #   del $0.8
    #   print(X)
    #   $0.10 = const(NoneType, None)  :: none
    #   del $0.10

    print(X)

    # --- LINE 10 --- 
    #   $0.12 = cast(value=X)  :: int64
    #   del X
    #   return $0.12

    return X