如何在 Cython 中使用 128 位整数

2023-12-20

在我的 64 位计算机上long long类型有 64 位。

print(sizeof(long long))
# prints 8

我需要使用 128 位整数,幸运的是海湾合作委员会支持这些 https://gcc.gnu.org/onlinedocs/gcc/_005f_005fint128.html。我如何在 Cython 中使用这些?

以下不起作用。编译foo.pyx只包含

cdef __int128_t x = 0

yields

$ cython foo.pyx 

Error compiling Cython file:
------------------------------------------------------------
...

cdef __int128_t x = 0
    ^
------------------------------------------------------------

foo.pyx:2:5: '__int128_t' is not a type identifier

编辑:这不再是解决方法,这是正确的方法。另请参阅@IanH 的回答。

现在,你遇到的问题是cython无法识别您的类型,同时gcc做。所以我们可以尝试欺骗cython.

File helloworld.pyx:

cdef extern from "header_int128.h":
    # this is WRONG, as this would be a int64. it is here
    # just to let cython pass the first step, which is generating
    # the .c file.
    ctypedef unsigned long long int128

print "hello world"

cpdef int foo():
    cdef int128 foo = 4
    return 32

File header_int128.h:

typedef __int128_t int128;

File setup.py:

from distutils.core import setup
from Cython.Build import cythonize

setup(ext_modules = cythonize("helloworld.pyx"))

现在,在我的机器上,当我运行时python setup.py build_ext --inplace,第一步通过,文件helloworld.c生成,然后gcc编译也通过了。

现在如果你打开文件helloworld.c,你可以检查你的变量foo实际上被声明为int128.

使用此解决方法时要非常小心。特别是,如果您分配一个,则 cython 可能不需要在 C 代码中进行强制转换int128 to a int64例如,因为在该过程的这一步实际上并没有区分它们。

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

如何在 Cython 中使用 128 位整数 的相关文章

随机推荐

  • 如何在字典中分配键=>值对?

    这是我的代码 string inputs new 1 2 5 90 7 12 1 70 29 60 Declare Dictionary var results new Dictionary
  • 大规模查询需要 Magento sql 查询帮助

    我正在尝试修改 Magento 的以下 MySQL 查询 它现在所做的是返回报告中简单且可配置产品的产品信息 不幸的是 简单产品不具备父级可配置产品所拥有的所有信息 我想要它做的是使用桌子catalog product super link
  • 如何使用javascript获取div中的子节点

    下面是我的div的结构 div table cellpadding 0 cellspacing 0 border 0 width 100 tr td style width 50px text align left 09 15 AM td
  • 配置运行器以同时运行多个作业

    当一个 gitlab runner 服务多个项目时 它只能运行一个 CI 管道 而其他项目管道必须排队 是否可以让 gitlab runner 并行运行所有项目的管道 我似乎没有在任何地方找到这方面的配置解释 我相信您正在寻找的配置选项是c
  • 当 div 由于页面大小变化而使用 CSS 重新对齐时,动态添加边距

    我有一个页面 其中内联块中有一个 div 结构 现在每个块 div 都有一个最小大小 当窗口大小减小到小于所有内部 div 最小宽度之和时 我将一些元素移动到下一行 我现在希望将填充添加到 div 中 单独移动到下一行 并且我不希望使用 j
  • 获取所有可能的子集 - 保持顺序

    这是这个问题的后续 生成集合的所有 唯一 子集 不是幂集 https stackoverflow com questions 8643812 generate all unique subsets of a set not a powers
  • 在未连接的套接字上不允许执行此操作

    考虑以下 public void Connect clientObject new TcpClient IPEndPoint ipEnd new IPEndPoint IPAddress Parse 127 0 0 1 90 central
  • dimple.js 如何在不更改数据的情况下更改图表轴的标签?

    假设我们有示例的条形图http dimplejs org examples viewer html id bars vertical http dimplejs org examples viewer html id bars vertic
  • template.ParseGlob() 可以解析子目录中的模板吗?

    为了清理模板文件夹 我想将常用模板保存在子文件夹中 目前我有以下文件结构 main go templates index tpl Main template for the main page templates includes head
  • 翻译 WordPress 插件标题

    如何翻译 WordPress 插件标头 我已经使用以下方法翻译了插件中的所有字符串 and e 功能 po 文件 文本域 WordPress 加载语言文件的函数 load plugin textdomain mnbaa seo false
  • 为什么我的 As400 无法从新创建的成员别名中进行选择?

    我已经按照此描述设置了代码question https stackoverflow com questions 346512 sql query of multi member file on as400 创建别名和删除别名一样有效 对于我
  • 不使用reverse() 或[::-1] 反转字符串?

    我遇到了一个奇怪的 Codecademy 练习 它需要一个函数 该函数将字符串作为输入并以相反的顺序返回它 唯一的问题是你不能使用相反的方法或 stackoverflow 上的常见答案 1 显然 在现实的编程世界中 人们很可能会选择扩展切片
  • WinForm 应用程序中的 Microsoft 报表教程

    我在我的 WinForm 应用程序项目中使用 Microsoft Report 我对表达式 组 甚至过滤器和其他许多东西有一些问题 我正在寻找 Microsoft Report 的完整教程 但直到现在我还没有找到任何教程 可以你帮我找个教程
  • 静态变量初始化顺序

    C 保证编译单元 cpp 文件 中的变量按照声明的顺序进行初始化 对于编译单元的数量 这一规则分别适用于每个编译单元 我指的是类之外的静态变量 但是 变量初始化的顺序在不同的编译单元中是未定义的 我在哪里可以看到关于 gcc 和 MSVC
  • Log4cplus RollingFileAppender 是否异步

    我将为我们的应用程序添加 Log4cplus 我们的应用程序是用 C 编写的 并且是多线程的 我想使用 Log4Cplus RollingFileAppender 来实现同样的目的 我知道Log4Cplus源自Java Log4j 由于我不
  • 在集群内运行 kubectl

    我有一个 Kubernetes 1 10 集群已启动并正在运行 使用以下命令 我创建一个在集群内运行 bash 的容器 kubectl run tmp shell rm i tty image centos bin bash 我在正在运行的
  • 将对象转换为键值对象数组,例如 `{ name: "Apple", value: "0.6" }`

    我有一个这样的对象 const total Apple 0 6 Banana 0 6 Orange 1 Grapes 0 4 Pineapple 0 4 现在我想将其转换为键值对象数组 其中每个对象具有相同的两个属性集 name and v
  • gnuplot 中带有参数图的 for 循环

    我正在尝试在 gnuplot 4 6 中绘制多个参数曲线 在早期版本 4 4 中 命令 set para 为 a 1 10 a cos t a sin t 绘制 pi pi 参数模式和迭代之间的语法歧义是当前 gnuplot 版本中已记录的
  • 如何提取 vcxproj 中每个编译单元的编译参数?

    我正在尝试获取每个编译单元的编译参数 以便我可以创建 编译命令 json http clang llvm org docs JSONCompilationDatabase html 对于我的 vcxproj 它可以与 clang 的 lib
  • 如何在 Cython 中使用 128 位整数

    在我的 64 位计算机上long long类型有 64 位 print sizeof long long prints 8 我需要使用 128 位整数 幸运的是海湾合作委员会支持这些 https gcc gnu org onlinedocs