gpt4 book ai didi

python - 在代码中处理大数字

转载 作者:太空狗 更新时间:2023-10-29 19:30:36 24 4
gpt4 key购买 nike

我正在处理一个编程问题,我需要处理一个涉及 100000 位数字的数字。 python 可以处理这样的数字吗?

最佳答案

如其他答案所示,Python 确实支持仅受可用内存量限制的整数。如果您想更快地支持他们,请尝试 gmpy (作为 gmpy 的作者和当前的共同维护者,我在这里当然有点偏见;-):

$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x+1'
10000 loops, best of 3: 114 usec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y+1'
10000 loops, best of 3: 65.4 usec per loop

通常,算术不是处理此类数字的瓶颈(尽管 gmpy 对某些组合和数论函数的直接支持可以帮助您处理此类数字) .将数字转为十进制字符串可能是最常见的操作,感觉最慢......:

$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(x)'
10 loops, best of 3: 3.11 sec per loop
$ python -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'str(y)'
10 loops, best of 3: 27.3 msec per loop

如您所见,即使在 gmpy 中,大数字的字符串化也可能比简单的加法慢数百倍(唉,这是一个本质上复杂的操作!);但在 native Python 代码中,字符串化的次数比简单的加法慢 数万 倍,所以你真的要注意这一点,特别是如果你决定不下载和安装gmpy(例如,因为您不能:例如,Google App Engine 当前不支持 gmpy)。

最后,中间情况:

$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'x*x'
10 loops, best of 3: 90 msec per loop
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y*y'
100 loops, best of 3: 5.63 msec per loop
$ python2.6 -mtimeit -s'import gmpy; x=10**100000; y=gmpy.mpz(x)' 'y*x'
100 loops, best of 3: 8.4 msec per loop

如您所见,在 native Python 代码中将两个大数相乘几乎比简单的加法慢 1000 倍,而使用 gmpy 时减速不到 100 倍(甚至还不算太糟)如果只有一个,如果数字已经是 gmpy 自己的格式,这样就会产生转换另一个的开销。

关于python - 在代码中处理大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com