Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Floating point 运行64位计算机的128位Fortran计算_Floating Point_Fortran_64 Bit_Gfortran_Quadruple Precision - Fatal编程技术网

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

Floating point 运行64位计算机的128位Fortran计算,floating-point,fortran,64-bit,gfortran,quadruple-precision,Floating Point,Fortran,64 Bit,Gfortran,Quadruple Precision,我有一个64位的linux系统。我使用gfortran编译并运行我的Fortran代码,这将输出一些双精度数字,即约16位小数。e、 g gfortran some_code.f -o executable1 ./executable1 10.1234567898765432 gfortran -fdefault-real-8 some_code.f -o executable2 ./executable2 10.12345678987654321234567898765432 如果现在使用

我有一个64位的linux系统。我使用gfortran编译并运行我的Fortran代码,这将输出一些双精度数字,即约16位小数。e、 g

gfortran some_code.f -o executable1
./executable1
10.1234567898765432
gfortran -fdefault-real-8 some_code.f -o executable2
./executable2
10.12345678987654321234567898765432
如果现在使用该标志编译,Fortran双精度类型将提升为16字节=128位,并输出一些数字,但精度更高,约为33位小数。e、 g

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

我的问题是:如果我的计算机只有64位,这个计算怎么能达到如此高的精度?

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

128位浮点数字是在软件中实现的,它是128位浮点处理器单元的一种“模拟”,实际上速度非常慢。这不是因为您的CPU是64位的,而是因为CPU的浮点单元只实现64位浮点运算。即使在英特尔的32位CPU中,情况也是如此

为GCC实现128位计算的库是



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

Hmmm有趣,那么64位处理器可以使用64位运算模拟128位运算吗?这就是为什么128位的速度会慢?不管它是32位处理器还是64位处理器,甚至是16位处理器。您感兴趣的是浮点单位。英特尔CPU具有支持32位和64位IEEE浮点数的浮点单元。其他类型的浮点数必须在软件中实现。是的,它的速度很慢。这在软件中是完全可能的。您甚至可以获得更高的精度(数百万位)。这完全取决于所使用的软件/算法。精度越高,过程往往越慢,尽管有许多可能的技巧和算法可以加快速度。CPU是64位的事实与此无关。这也可以在32位或16位处理器上完成。如果可能,双精度将提升到128位。更可能的是,在典型的现代硬件(如x86)上,它将保持64位。