Я использую gfortran, и я начинаю писать новую программу, которая, как я знаю, будет иметь миллиарды и миллиарды проверок равенства с плавающей запятой (подумайте «симуляция Монте-Карло»).И мне нужно знать, достаточно ли близки два действительных числа.
Это может быть простое число (a == b
) или точки 2D / 3D, и даже комплексные числа.(Тем не менее, я в основном буду делать простые числа.)
Вам знакомо внутреннее устройство gfortran, которое могло бы мне здесь помочь, или, возможно, функция в BLAS / LAPACK, которая могла бы помочь.Или, может быть, какой-то аккуратный (возможно, не переносимый) прием для быстрого сравнения?Эпсилона 0,0001 мне должно хватить, но, может быть, есть магическое число, которое gfortran на x86_64 может оптимизировать с помощью побитовой операции.
Я действительно не знаю, и Google не смог найти решение для меня.Можете ли вы?
Если вы не знаете об изящном приеме, как вы думаете, что будет самой быстрой реализацией традиционного abs(a-b) <= epsilon
?Или это просто самый быстрый и я ничего не могу с этим поделать?(к счастью, это «чистая» функция, поэтому она, вероятно, будет встроенной)