Numpy八倍精度浮点和128位整数。为什么和怎么做?

2024-04-19 00:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

这主要是出于好奇。我注意到numpy测试套件contains tests for 128 bit integers,而{a2}指的是int128float256octuple precision?),以及其他似乎没有映射到我机器上的numpy数据类型的类型。在

我的机器是64位的,但我可以使用四个128位浮点(but not really)。我想,如果可以在软件中模拟四倍浮点,理论上也可以模拟八倍浮点和128位整数。另一方面,到目前为止,我从未听说过128位整数或八倍精度浮点。为什么在numpy的numerictypes模块中有对128位int和256位浮点的引用,如果没有相应的dtype,我该如何使用它们?在


Tags: integersnumpy机器a2for套件bittests
2条回答

NumPy的功能非常强大,可以处理比内部CPU表示(例如64位)大得多的数字。在

对于动态类型,它将数字存储在数组中。它也可以扩展内存块,这就是为什么你可以有一个500位数的整数。这种动态类型称为bignum。在早期的Python版本中,它是long类型。在较新的Python(3.0+)中只有long,称为int,它支持几乎任意数量的数字(&>;bignum)。在

如果指定数据类型(例如int32),则指定位长度和位格式,即内存中的哪个位代表什么。示例:

dt = np.dtype(np.int32)      # 32-bit integer
dt = np.dtype(np.complex128) # 128-bit complex floating-point number

查找范围:https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

这是一个非常有趣的问题,可能与python、计算和/或硬件有关。虽然不想给出一个完整的答案,但我要做的是。。。在

首先要注意的是,类型是由语言定义的,并且可以不同于您的硬件体系结构。例如,你甚至可以用一个8位处理器来实现双精度。当然,任何算法都涉及多个CPU指令,使得计算速度慢得多。不过,如果你的应用程序需要它,它可能是值得的,甚至是需要它(迟到总比出错好,尤其是如果你在运行一个模拟,比如说桥的稳定性…),那么128位精度要求在哪里呢?{a1}在这里^}。。。在

一个更有趣的细节是,当我们说一台计算机是64位的时候,这并没有完全描述硬件。有很多部分可以是(至少有时是)不同的位:CPU中的计算寄存器、内存寻址方案/内存寄存器和不同的总线,其中最重要的是从CPU到内存的总线。在

-ALU(算术和逻辑单元)具有进行计算的寄存器。你的机器是64位的(不确定这是否也意味着他们可以在类似的时间进行2个32位的计算),这显然是本讨论最相关的数量。很久以前,你可以出去买一个co-processor来加快计算精度。。。在

-保存内存地址的寄存器限制了计算机可以看到的内存(直接),这就是为什么有32位内存寄存器的计算机只能看到2^32字节(或大约4 GB)注意,对于16位,这变成了65K,这是非常低的。操作系统可以找到绕过这一限制的方法,但不能针对单个程序,因此32位计算机中的任何程序的内存通常都不能超过4GB。在

-请注意,这些限制是关于字节的,而不是位。这是因为当从内存中引用和加载时,我们加载字节。事实上,这样做的方式,加载一个字节(8位)或8(64位==计算机的总线长度)需要相同的时间。我要了一个地址,然后马上把所有的东西都送上车。 在一个体系结构中,所有这些量可能不是相同的位数。在

相关问题 更多 >