Open
Description
Inspied by Julia, I would like to have a function to compare two floating-point numbers with a tolerance, useful for testing.
elemental function is_approximated_1(x) result(nearly_equal)
real(dp),intent(in) :: x
logical :: nearly_equal
nearly_equal = abs(x) < d_tol
end function is_approximated_1
elemental function is_approximated_2(x,y) result(nearly_equal)
real(dp),intent(in) :: x,y
logical :: nearly_equal
nearly_equal = abs(x-y) < d_tol
end function is_approximated_2
elemental function is_approximated_2_tol(x,y,tol) result(nearly_equal)
real(dp),intent(in) :: x,y,tol
logical :: nearly_equal
nearly_equal = abs(x-y) < tol
end function is_approximated_2
Defining a general name:
interface is_approximated
module procedure is_approximated_1, is_approximated_2, is_approximated_2_tol
end interface is_approximated
Usage:
real(real64) :: x(5),y(5)
print *,any(is_approximated(x,y))