Cython结果不同

时间:2019-01-05 13:39:31

标签: python cython

为什么cython中的此函数每次运行都会返回不同的结果?

我通过了50000考试

cpdef int fun1(int num):
    cpdef int result
    cdef int x
    for x in range(num):
        result += x*x
    return result

编辑: 所以现在我将其更改为这样的长结果

cpdef long long fun1(int num):
   cdef long long result = 0
   cdef int x = 0
   for x in range(num):
       result += x*x
   return result

并返回25950131338936 但是:) python func

def pyfunc(num):
    result = 0
    for x in range(num):
        result += x * x
    return result

返回41665416675000

那么嗯,那怎么了?

2 个答案:

答案 0 :(得分:3)

这里可能有两个问题。首先,结果应初始化为零。其次,结果是从0到50000(不包括在内)的所有整数的总和。

enter image description here

问题在于存储类型int不能容纳这么大的数字。尝试使用更大的存储类型,例如long long,它会起作用。一个32位整数可以容纳的最大值大约为2 ^ 31。 long long可以容纳的最大值通常为2 ^ 63。在手边的系统上咨询C编译器以了解确切的限制。

答案 1 :(得分:0)

cdef 语句用于声明本地或模块级的C变量。

因此,您需要将初始值设置为result变量。如果不这样做,它将在呼叫时获取它在内存中找到的内容。

cpdef int fun1(int num):
cdef int result = 0
cdef int x
for x in range(num):
    result += x * x
return result