Python 有效整数大小
Python effective integer size
例如在 C#、C++ 中,Java 或 Java脚本有效 int 大小为 32 位。如果我们要计算一些大数,例如70位,我们应该使用一些软件功能(Arbitrary-precision arithmetic)。
Python 有一个非常棘手的整数内部无限表示,我无法弄清楚整数运算最有效的 int 大小是多少。
换句话说,我们是否有一些 int 大小,比如 64 位,用于有效的 int 用法?
或者 16
、32
、64
或 some random bits count
无关紧要,并且 Python 将适用于所有这些整数效率一样?
简而言之,Python 总是使用任意精度算法还是 32 它使用硬件算法?
CPython的int
,在Python3中,表示为一个sign-magnitude值数组,其中数组中的每个元素代表15或30数量级的位数,分别用于 32 位和 64 位 Python 构建。这是一个实现细节,但却是一个长期存在的细节(最初一直是 15,但发现在 64 位系统上工作时,将数组中每个“数字”的大小和使用位数加倍很容易获胜).它对适合单个(或有时两个)这样的数组值的 int
s 进行了优化(它从数组中提取原始值并执行单个 CPU 操作,跳过适用于任意长度的情况),并且在 CPython 的 64 位构建中,这目前意味着通常专门优化大小为 30 位或更小的值(60 位大小偶尔会有快速路径)。
也就是说,很少有理由考虑这一点; CPython 解释器的开销非常高,很难想象手动将较大的操作分解为较小的操作(在 Python 层执行许多小操作会产生更多的解释器开销)的场景比 Python 在 C 层执行 array-based 操作(即使没有特殊的快速路径)的成本要小得多。该规则的例外情况将全部依赖于 non-Python-int
-解决方案,使用固定大小 numpy
数组来向量化工作,并且在这一点上主要遵循 C 规则(因为 numpy
数组大部分时间都是原始 C 数组的包装器)。
例如在 C#、C++ 中,Java 或 Java脚本有效 int 大小为 32 位。如果我们要计算一些大数,例如70位,我们应该使用一些软件功能(Arbitrary-precision arithmetic)。
Python 有一个非常棘手的整数内部无限表示,我无法弄清楚整数运算最有效的 int 大小是多少。
换句话说,我们是否有一些 int 大小,比如 64 位,用于有效的 int 用法?
或者 16
、32
、64
或 some random bits count
无关紧要,并且 Python 将适用于所有这些整数效率一样?
简而言之,Python 总是使用任意精度算法还是 32 它使用硬件算法?
CPython的int
,在Python3中,表示为一个sign-magnitude值数组,其中数组中的每个元素代表15或30数量级的位数,分别用于 32 位和 64 位 Python 构建。这是一个实现细节,但却是一个长期存在的细节(最初一直是 15,但发现在 64 位系统上工作时,将数组中每个“数字”的大小和使用位数加倍很容易获胜).它对适合单个(或有时两个)这样的数组值的 int
s 进行了优化(它从数组中提取原始值并执行单个 CPU 操作,跳过适用于任意长度的情况),并且在 CPython 的 64 位构建中,这目前意味着通常专门优化大小为 30 位或更小的值(60 位大小偶尔会有快速路径)。
也就是说,很少有理由考虑这一点; CPython 解释器的开销非常高,很难想象手动将较大的操作分解为较小的操作(在 Python 层执行许多小操作会产生更多的解释器开销)的场景比 Python 在 C 层执行 array-based 操作(即使没有特殊的快速路径)的成本要小得多。该规则的例外情况将全部依赖于 non-Python-int
-解决方案,使用固定大小 numpy
数组来向量化工作,并且在这一点上主要遵循 C 规则(因为 numpy
数组大部分时间都是原始 C 数组的包装器)。