为什么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
那么嗯,那怎么了?
答案 0 :(得分:3)
这里可能有两个问题。首先,结果应初始化为零。其次,结果是从0到50000(不包括在内)的所有整数的总和。
问题在于存储类型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