Быстрое сравнение равенства чисел с плавающей точкой в ​​Фортране - PullRequest
1 голос
/ 27 сентября 2019

Я использую gfortran, и я начинаю писать новую программу, которая, как я знаю, будет иметь миллиарды и миллиарды проверок равенства с плавающей запятой (подумайте «симуляция Монте-Карло»).И мне нужно знать, достаточно ли близки два действительных числа.

Это может быть простое число (a == b) или точки 2D / 3D, и даже комплексные числа.(Тем не менее, я в основном буду делать простые числа.)

Вам знакомо внутреннее устройство gfortran, которое могло бы мне здесь помочь, или, возможно, функция в BLAS / LAPACK, которая могла бы помочь.Или, может быть, какой-то аккуратный (возможно, не переносимый) прием для быстрого сравнения?Эпсилона 0,0001 мне должно хватить, но, может быть, есть магическое число, которое gfortran на x86_64 может оптимизировать с помощью побитовой операции.

Я действительно не знаю, и Google не смог найти решение для меня.Можете ли вы?

Если вы не знаете об изящном приеме, как вы думаете, что будет самой быстрой реализацией традиционного abs(a-b) <= epsilon?Или это просто самый быстрый и я ничего не могу с этим поделать?(к счастью, это «чистая» функция, поэтому она, вероятно, будет встроенной)

...