Numerical Stability
Tolerance Compare
Near Enough Values
Floating-point checks usually compare a difference against a tolerance instead of exact equality.
Program
Play the program to tighten or loosen the tolerance.
tolerance_compare.f90
program tolerance_compare_demo
implicit none
real :: expected
real :: observed
real :: tolerance
real :: difference
integer :: passed
expected = 10.0
observed = 9.9
tolerance =
difference = abs(expected - observed)
passed = 0
if (difference <= tolerance) passed = 1
print '(F0.2, 1X, F0.2, 1X, I0)', difference, tolerance, passed
end program tolerance_compare_demo
program tolerance_compare_demo
implicit none
real :: expected
real :: observed
real :: tolerance
real :: difference
integer :: passed
expected = 10.0
observed = 9.9
tolerance =
difference = abs(expected - observed)
passed = 0
if (difference <= tolerance) passed = 1
print '(F0.2, 1X, F0.2, 1X, I0)', difference, tolerance, passed
end program tolerance_compare_demo
program tolerance_compare_demo
implicit none
real :: expected
real :: observed
real :: tolerance
real :: difference
integer :: passed
expected = 10.0
observed = 9.9
tolerance =
difference = abs(expected - observed)
passed = 0
if (difference <= tolerance) passed = 1
print '(F0.2, 1X, F0.2, 1X, I0)', difference, tolerance, passed
end program tolerance_compare_demo
difference
`abs(expected - observed)` measures the gap between values.
tolerance
The tolerance records how much difference is acceptable.
near comparison
The result passes when the difference is within tolerance.