【发布时间】:2014-11-12 01:42:03
【问题描述】:
python 3.4、windows 10、cython 0.21.1
我正在用 cython 将此函数编译为 c
def weakchecksum(data):
"""
Generates a weak checksum from an iterable set of bytes.
"""
cdef long a, b, l
a = b = 0
l = len(data)
for i in range(l):
a += data[i]
b += (l - i)*data[i]
return (b << 16) | a, a, b
产生此错误: “溢出错误:Python int 太大而无法转换为 C long”
我也尝试将它们声明为无符号长整数。我用什么类型来处理非常大的数字?如果它对于 c 长来说太大了,有什么解决方法吗?
【问题讨论】:
-
cdef long long怎么样? -
同样的错误,导致它的数字是 2891688164113197
-
考虑制作一个大整数类?它将是一个包含数字的链表
-
是的,我考虑过,我正在使用 cython 来加速一些代码,并希望避免创建会增加开销的特殊类
-
在 gcc 上签名 long long,Ubuntu 14.04,大约是 9.2e+18,从 limits.h 来看,它正好是
define LLONG_MAX 9223372036854775807LL见 gnu.org/software/libc/manual/html_node/…; unsigned long long 更大。是的,看到你在 Windows 上,但这应该是关于有多少位适合硬件级算法。
标签: python python-3.x cython