ger*_*rit 16 python numpy int128
这主要是出于好奇心的问题.我注意到numpy测试套件包含128位整数的测试,numerictypes模块引用int128,float256(八倍精度?),以及其他类型似乎没有映射到我的机器上的numpy dtypes.
我的机器是64位,但我可以使用四倍的128位浮点数(但不是真的).我想如果可以在软件中模拟四重浮点数,理论上也可以模拟八重浮点数和128位整数.另一方面,直到现在我才从未听说过128位整数或八位精度浮点数.numerictypes如果没有相应的dtypes,为什么在numpy的模块中有128位int和256bit浮点的引用?如何使用它们?
这是一个非常有趣的问题,可能有与 python、计算和/或硬件相关的原因。虽然不想给出完整的答案,但这就是我想要的......
首先请注意,类型是由语言定义的,可能与您的硬件架构不同。例如,您甚至可以使用 8 位处理器来实现双打。当然,任何算术都涉及多个 CPU 指令,从而使计算速度变慢。尽管如此,如果您的应用程序需要它,它可能是值得的,甚至是必需的(迟到总比错误好,特别是如果您正在运行模拟以保证桥的稳定性......)那么哪里需要 128 位精度?这是维基百科文章......
一个更有趣的细节是,当我们说计算机是 64 位时,这并没有完全描述硬件。有很多部分可以(并且至少有时是)不同的位:CPU 中的计算寄存器、内存寻址方案/内存寄存器以及不同的总线,其中最重要的是从 CPU 到内存的总线。
-ALU(算术和逻辑单元)具有进行计算的寄存器。您的机器是 64 位(不确定这是否也意味着它们可以同时进行 2 个 32 位计算)这显然是本次讨论中最相关的数量。很久以前,你可以出去购买一个协处理器来加速更高精度的计算......
- 保存内存地址的寄存器限制了计算机可以(直接)看到的内存,这就是为什么具有 32 位内存寄存器的计算机只能看到 2^32 字节(或大约 4 GB)的原因。请注意,对于 16 位,这变成了 65K,这是非常大的。低的。操作系统可以找到绕过此限制的方法,但不能针对单个程序,因此 32 位计算机中的程序通常不能拥有超过 4GB 的内存。
- 请注意,这些限制是关于字节,而不是位。这是因为当引用和从内存加载时,我们加载字节。事实上,按照这种方式,加载一个字节(8 位)或 8 个字节(64 位 == 计算机的总线长度)需要相同的时间。我请求一个地址,然后立即通过总线获取所有位。在一个架构中,所有这些数量可能不是相同的位数。