运行 64 位计算机的 128 位 Fortran 计算

Running 128 bit Fortran calculations of a 64 bit computer

我有一个 64 位 linux 系统。我使用 gfortran 编译并 运行 我的 Fortran 代码,这会输出一些双精度数字,即~ 16 位小数。例如

gfortran some_code.f -o executable1
./executable1
10.1234567898765432

如果我现在使用标志 -fdefault-real-8 进行编译,Fortran 双精度类型将提升为 16 字节 = 128 位并输出一些数字,但精度更高~33 位小数。例如

gfortran -fdefault-real-8 some_code.f -o executable2
./executable2
10.12345678987654321234567898765432

我的问题是:如果我的电脑只有 64 位,怎么能进行如此高精度的计算?

首先,您的 CPU 是 64 位的这一事实意味着它使用 64 位指针(内存地址)。它与浮点变量大小完全无关。 32 位 CPUs(甚至 16 位!)使用 64 位浮点数和整数就好了。1

128 位浮点数是在软件中实现的,它是对 128 位浮点处理器单元的一种“模拟”,实际上速度很慢。这不是因为你的CPU是64位的,而是因为CPU的浮点单元只实现了64位的浮点运算。即使在 Intel 的 32 位 CPU 中也是如此。

为 GCC 实现 128 位计算的库是 libquadmath


1实际上,浮点位运算是在浮点单元(FPU)中完成的。它曾经是与 CPU 分开的特殊芯片,但现在它们始终集成在 Intel 消费处理器中。在过去,如果你不购买单独的 FPU,所有 浮点运算都是模拟的,而且速度很慢。