Python有效整数大小

问题描述

例如,在C#,C ++,Java或JavaScript中,有效的int大小为32位。如果要计算一些较大的数字(例如70位),则应使用某些软件功能(Arbitrary-precision arithmetic)。

Python有一个非常棘手的整数内部无边表示形式,我无法弄清楚什么是整数算术最有效的int大小。

换句话说,为了有效使用int,我们是否有一些int大小(例如64位)?

还是163264some random bits count没关系,Python将以相同的效率为所有这些int工作吗?

简而言之,Python总是使用任意精度算术还是32 \ 64的情况下使用硬件算术?

解决方法

在Python 3中,CPython的int表示为一个符号级值数组,其中数组中的每个元素分别代表32位和64位Python构建的15或30位大小。这是一个实现细节,但是却是一个长期的细节(最初一直是15个,但是发现在64位系统上工作时,将阵列中每个“数字”的使用位的大小和数量加倍是一个轻松的选择) )。它针对int进行了优化,以适合单个(或有时两个)这样的数组值(它从数组中提取原始值并执行单个CPU操作,跳过了适用于任意长度情况的循环和算法),以及在CPython的64位版本上,目前意味着通常会对大小在30位以下的值进行特别优化(有时60位大小的路径会很快)。

也就是说,很少有理由考虑到这一点; CPython解释器的开销非常高,很难想象这样一种场景,即手动将较大的操作分解为较小的操作(在Python层进行更多的较小的操作会产生更多的解释器开销),而这要比Python花费小得多的代价C层的基于数组的操作(即使没有特殊的快速路径)。该规则的例外情况都将依赖于非Python-int-解决方案,使用固定大小的numpy数组对工作进行矢量化,并且此时基本上遵循C规则(因为numpy数组大多数时候都是原始C数组的包装器。)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...