Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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
Fortran中快速浮点数相等比较_Fortran_Gfortran - Fatal编程技术网

Fortran中快速浮点数相等比较

Fortran中快速浮点数相等比较,fortran,gfortran,Fortran,Gfortran,我正在使用gfortran,我开始编写一个新程序,我知道它将有数十亿的浮点相等检查(想想“蒙特卡罗模拟”)。我需要知道两个实数是否“足够接近” 它可以是一个简单的数字(a==b)或二维/三维点,甚至是复数。(不过,我主要做简单的数字。) 您是否知道gfortran的内在特性可以在这里帮助我,或者BLAS/LAPACK中的一个函数可以实现这一点。或者是一些简洁的(可能是不可移植的)技巧来快速比较? epsilon为0.0001对我来说应该足够了,但也许x86_64上的gfortran可以通过按位操

我正在使用gfortran,我开始编写一个新程序,我知道它将有数十亿的浮点相等检查(想想“蒙特卡罗模拟”)。我需要知道两个实数是否“足够接近”

它可以是一个简单的数字(
a==b
)或二维/三维点,甚至是复数。(不过,我主要做简单的数字。)

您是否知道gfortran的内在特性可以在这里帮助我,或者BLAS/LAPACK中的一个函数可以实现这一点。或者是一些简洁的(可能是不可移植的)技巧来快速比较? epsilon为0.0001对我来说应该足够了,但也许x86_64上的gfortran可以通过按位操作优化一个神奇的数字

我真的不知道,谷歌也无法为我找到解决方案。你能吗


如果你不知道一个巧妙的技巧,你认为传统的
abs(a-b)下降
=
的最快实现应该是什么。。多少钱?我建议使用a,但我不希望有太多有趣的数字,我会尝试一下。我不在乎它是<还是实际上,现在我认为它更好了,它不会有任何区别。如果你想一想根据godbolt(在C和gcc9中)在选通级别会发生什么,那么可能没有神奇的快速比较技巧,一个调用seta(如果高于设置字节),另一个调用setnb(如果不低于设置字节)。它的作用正好相反,但这并不重要(只要测试是否未设置位,而不是检查是否设置了字节,就可以了),编译器真的很聪明。顺便说一句,如果你反汇编“return(fabsf(a-b)<0.0000)”,asm代码是“xor eax,eax;ret;”:ddrring
=
应该已经更快了。。多少钱?我建议使用a,但我不希望有太多有趣的数字,我会尝试一下。我不在乎它是<还是实际上,现在我认为它更好了,它不会有任何区别。如果你想一想根据godbolt(在C和gcc9中)在选通级别会发生什么,那么可能没有神奇的快速比较技巧,一个调用seta(如果高于设置字节),另一个调用setnb(如果不低于设置字节)。它的作用正好相反,但这并不重要(只要测试位是否未设置,而不是检查字节是否已设置,就可以了)编译器真的很聪明。顺便说一句,如果你反汇编“return(fabsf(a-b)<0.0000)”,asm代码是“xor eax,eax;ret;”:D