【问题标题】:safely handle huge numbers in python extension在 python 扩展中安全地处理大量数字
【发布时间】:2021-03-16 23:51:43
【问题描述】:

从 Python 3 开始,int 的大小没有上限。我想处理 150+ 个十进制数字的大整数。

这比unsigned long long 保证的要大得多,所以我认为我不能依靠PyLong_AsLongLong 来操纵它。

如何对传递给我的 C 扩展方法的如此大的整数执行数学运算?

【问题讨论】:

  • 嗯...你 just built 具有 1000000 多位数字的整数,现在你称 150 多位数字为“巨大”? :-P
  • @Manuel lmao,很高兴见到你。实际上,我只是从中抽取了一个随机结果,它是较小的列表之一。

标签: python python-3.x python-extensions


【解决方案1】:

只需将它们作为 Python int 处理,使用PyNumber_AddPyNumber_Multiply 等Python 算术运算。不要尝试转换为机器整数。

现在,如果您希望通过在 C 中执行此操作来获得任何速度优势,那么这不会发生。如果您想优化大整数运算,请尝试更高效的 bignum 库,例如 gmpy2。确保您的算法也高效 - 无论使用哪种整数实现,您的代码审查问题中的 _reverseBits 都非常低效。

【讨论】:

  • 谢谢,我不知道所有 PyNumber 东西的存在。
  • 我想说他们_reverseBits 的算法效率还不错,因为他们显然只在很小的数字上使用它。
  • @Manuel:是的,仔细观察,看起来他们如何处理bitstream 是一个更大的问题。该算法确实需要根据位序列而不是 bignums 来工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多