使用带有大 int 的 cython 时出现 OverflowError

2023-12-26

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

这会产生这个错误: “OverflowError:Python int 太大,无法转换为 C long”

我还尝试将它们声明为无符号长整型。我应该使用什么类型来处理非常大的数字?如果它对于 c 来说太大了,有什么解决方法吗?


cython编译pyx文件到C,因此它取决于底层C编译器。

C 中整数类型的大小在不同平台和操作系统上有所不同,并且 C 标准没有规定确切的实现。

然而,存在事实上的实施约定。

32 位和 64 位的 Windows 使用 4 个字节(32 位)int and long, 8 字节(64 位)long long。 Win32 和 Win64 之间的区别在于指针的大小(Win32 为 32 位,Win64 为 64 位)。 (看数据类型范围 http://msdn.microsoft.com/en-us/library/s3f49ktz.aspx] 来自 MSDN)。

Linux 使用另一种模型:intlinux-32 和 linux-64 都是 32 位,long long始终是 64 位。long并且指针有所不同:linux-32 上为 32 位,linux-64 上为 64 位。

长话短说:如果您需要整数类型的最大容量,并且该容量在不同平台上不会改变,请使用long long (or unsigned long long).

数据范围为long long is [–9223372036854775808, 9223372036854775807].

如果您需要任意精度的数字,则有GMP库 https://gmplib.org/——高精度算术的事实上的标准。 Python 有它的包装器,称为gmpy2 https://pypi.python.org/pypi/gmpy2.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用带有大 int 的 cython 时出现 OverflowError 的相关文章

随机推荐

  • 有没有办法在调用构造函数之前设置属性?

    是的 我知道依赖项应该传递给构造函数 我不是在问编码风格或该做什么和不该做什么 我的应用程序中的许多类都与数据库驱动程序类的实例相关联 为此 我使用 PHP 的后期静态绑定创建了一个抽象工厂类 该类的唯一成员是保存驱动程序引用的属性 它看起
  • 目标 C:多名代表

    我很好奇是否以及如何使控制器成为两个不同对象的委托 这是允许的还是像 Java 中的多重继承 假设我想要一个控制器来响应
  • Openshift 上的 Scalatra 应用 - 设置 Jetty IP

    我正在尝试使用 DIY 盒在 Openshift 上部署一个最小的 Scalatra 应用程序 我已经成功让 SBT 正常工作 但是当涉及到container start 我收到错误 FAILED SelectChannelConn ema
  • 如何设置浮动 div 的宽度以占用剩余空间而不将其他 div 向下推?

    对于我想要制作的布局的一部分 我想使用三个 div 所有 div 都彼此相邻浮动 左侧和右侧有一个最大宽度设置 效果很好 但我希望中间的 div 扩大其宽度以填充剩余空间 澄清一下 左右 div 的宽度可以是从 0px 到最大宽度的任何位置
  • 枚举,在 switch case 中使用

    我定义了一个枚举 其中包含方法返回类型 如 String Float List Double 等 我将在 switch case 语句中使用它 例如我的枚举是 public enum MethodType DOUBLE LIST STRIN
  • 在多个故事板文件之间共享场景。 iPhone 与 iPad

    我正在使用故事板开发通用应用程序 我有 2 个故事板文件 一款适用于 iPhone 一款适用于 iPad 我将有一些场景想要在两者之间共享 并且我想使用故事板编辑器来设置它们 常见的是 UITableViewController 及其原型单
  • android:来自片段的菜单项单击事件

    我有一个带有操作栏的应用程序 并且菜单因主要活动而膨胀 我想拦截片段内的点击事件 但我不知道如何 你能帮我吗 主要活动 Override public boolean onCreateOptionsMenu Menu menu getMen
  • 如何使用预测和标准获得不同的结果

    我正在尝试使用 Grails 中的条件加载不同的父级 查询如下 Query def criteria Parent createCriteria results criteria list max params max offset par
  • Google Apps 脚本 JDBC 连接问题

    我在 google apps 脚本中使用 jdbc 连接器连接到任何 mysql 数据库时遇到问题 我正在使用教程代码 var conn Jdbc getConnection jdbc mysql host or ip 3306 datab
  • Windows 10 - System.Speech.Synthesis 无法获取移动版语音

    在我的 Windows 10 语言中 我安装了 2 个英语版本 US 英国 因此 在 设置 gt 时间和语言 gt 语音 中 在 文本转语音 部分下 我可以看到以下选项 微软大卫移动 微软乔治移动 微软苏珊移动 微软榛子移动 微软 Zira
  • 将 PDF 插入 Excel、Python

    我编写了一个 python 脚本 用于创建包含各种计算的电子表格 我想进一步将 pdf 插入电子表格 pdf 是理想的 但 jpeg 也可用 我翻遍了xlwt 没有找到任何东西 谁能建议一种方法来实现这一目标 要实际插入 PDF 您可能只需
  • 为瘦服务器和 sinatra 启用 SSL

    我正在尝试为我的瘦服务器 Web 应用程序启用 SSL 以便它可以通过 HTTPS 运行 我已完成以下操作 启动瘦网络服务器 我的应用程序 运行 主机 gt 127 0 0 1 端口 gt 9090 sslenable gt true ss
  • 使用ADT和SDK管理器,将android源代码附加到eclipse

    安装ADT后 我使用SDK Manager下载最新的android API的源代码 现在 当我运行ADT附带的Eclipse版本时 我仍然看不到android源代码 有没有简单的方法来解决这个问题 打开SDK Manager gt 在api
  • 如何在运行时从 NUnit 测试运行中获取单元测试方法属性?

    我将有关给定测试的各种信息 多个错误跟踪系统的 ID 存储在属性中 如下所示 TestCaseVersion 001 B 8345 X543 public void TestSomethingOrOther 为了在测试过程中获取这些信息 我
  • 如何以编程方式为视图分配 ID?

    在 XML 文件中 我们可以为视图分配一个 ID 例如android id id something 然后打电话findViewById 但是当以编程方式创建视图时 如何分配 ID I think setId 与默认分配不同 setId 是
  • 使用动态而不是反射来按名称调用方法

    使用 NET 4 0 我将如何使用 Dynamic 来完成以下任务而不使用反射 public void InvokeMethod string methodName Type t typeof GCS WebService GCS WebS
  • 如何从为结果启动的活动返回字符串

    我已经启动了结果活动 但如何从该活动返回类似参数的字符串 只需使用以下代码块 Intent intent new Intent intent putExtra RESULT STRING string setResult RESULT OK
  • 通过点击图像(jquery 或 javascript)动态生成地图区域坐标

    我想知道是否有一种方法可以通过单击图像的某些部分来动态生成地图区域坐标 这是为了生成完整的图像图 举个例子 我有这张图片 单击此处查看图像 http mauricio lairet es otr plano jpg 通过单击它 我想为每个定
  • 切片类型的切片

    我目前正在努力通过优秀的围棋之旅 https tour golang org 我使用以下解决方案完成了其中一项练习 45 func Pic dx dy int uint8 pic make uint8 dy type declaration
  • 使用带有大 int 的 cython 时出现 OverflowError

    python 3 4 Windows 10 cython 0 21 1 我正在用 cython 将此函数编译为 c def weakchecksum data Generates a weak checksum from an iterab