From 62afdef476d088d658fba2a1aaba64fd11479c5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20=C4=8Cert=C3=ADk?= Date: Tue, 4 Feb 2020 10:53:09 -0700 Subject: [PATCH] Use epsilon() for tolerances The original tolerances look arbitrary: real(sp), parameter :: sptol = 1.2e-06_sp real(dp), parameter :: dptol = 2.2e-15_dp but when written using epsilon() they are almost exactly 10x the machine epsilon for the particular precision kind: real(sp), parameter :: sptol = 10.06633 * epsilon(1._sp) real(dp), parameter :: dptol = 9.907919 * epsilon(1._dp) so I just rounded it to 10: real(sp), parameter :: sptol = 10 * epsilon(1._sp) real(dp), parameter :: dptol = 10 * epsilon(1._dp) which now shows the intent more clearly: the tolerance assumes we lose one digit of accuracy. --- src/tests/stats/test_mean.f90 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tests/stats/test_mean.f90 b/src/tests/stats/test_mean.f90 index 49e5a98fc..6de79b496 100644 --- a/src/tests/stats/test_mean.f90 +++ b/src/tests/stats/test_mean.f90 @@ -5,8 +5,8 @@ program test_mean use stdlib_experimental_stats, only: mean implicit none -real(sp), parameter :: sptol = 1.2e-06_sp -real(dp), parameter :: dptol = 2.2e-15_dp +real(sp), parameter :: sptol = 10 * epsilon(1._sp) +real(dp), parameter :: dptol = 10 * epsilon(1._dp) real(sp) :: s1(3) = [1.0_sp, 2.0_sp, 3.0_sp]