diff --git a/src/similarity_module.f90 b/src/similarity_module.f90
index 67481ddb0458329e80274d259bd9a977672f8720..a6b117639a9f42125d4d6ef939ae11f290fa24fb 100644
--- a/src/similarity_module.f90
+++ b/src/similarity_module.f90
@@ -86,7 +86,7 @@ contains
     real(c_double) :: sum_obs, sum_sim, sum_obs2, sum_sim2, sum_obs_sim
     real(c_double) :: mean_obs, mean_sim, std_obs, std_sim, r, beta, gamma, diff
     real(c_double) :: nan_val, eps
-    eps = epsilon(1.0_c_double)
+    eps = 1.0e-12_c_double
 
     count = 0
     sum_obs = 0.0_c_double
@@ -144,6 +144,7 @@ contains
     ! Final KGE computation
     diff = (r - 1.0_c_double)**2 + (beta - 1.0_c_double)**2 + (gamma - 1.0_c_double)**2
     kge_val = 1.0_c_double - sqrt(diff)
+    if (abs(kge_val - 1.0_c_double) < eps) kge_val = 1.0_c_double
   end function kge
   
   function rmse(sim, obs, n) result(res)
@@ -152,8 +153,10 @@ contains
     real(c_double) :: res
     integer :: i, count
     real(c_double) :: sum_sq, diff
-    real(c_double) :: nan_val
+    real(c_double) :: nan_val, eps
     nan_val = ieee_value(0.0_c_double, ieee_quiet_nan)
+    eps = 1.0e-12_c_double
+
     count = 0
     sum_sq = 0.0_c_double
     do i = 1, n
@@ -168,6 +171,7 @@ contains
       return
     end if
     res = sqrt(sum_sq / count)
+    if (res < eps) res = 0.0_c_double
     
   end function rmse
 
@@ -177,7 +181,7 @@ contains
     real(c_double) :: rmse_val, res
     real(c_double) :: inf_val, eps
     inf_val = ieee_value(0.0_c_double, ieee_positive_inf)
-    eps = epsilon(1.0_c_double)
+    eps = 1.0e-12_c_double
     
     rmse_val = rmse(obs, sim, n)
     if (rmse_val < eps) then
@@ -194,7 +198,7 @@ contains
     real(c_double) :: kge_val, res
     real(c_double) :: inf_val, eps
     inf_val = ieee_value(0.0_c_double, ieee_positive_inf)
-    eps = epsilon(1.0_c_double)
+    eps = 1.0e-12_c_double
 
     kge_val = kge(obs, sim, n)
     if (abs(kge_val - 1.0_c_double) < eps) then