diff --git a/include/evalhyd/detail/probabilist/brier.hpp b/include/evalhyd/detail/probabilist/brier.hpp
index 626b71a2996a0c0a00efa69352dc8997e3eafec5..51554ad06167e3d4a0dac36fe198fdc5b0c692a1 100644
--- a/include/evalhyd/detail/probabilist/brier.hpp
+++ b/include/evalhyd/detail/probabilist/brier.hpp
@@ -5,6 +5,8 @@
 #ifndef EVALHYD_PROBABILIST_BRIER_HPP
 #define EVALHYD_PROBABILIST_BRIER_HPP
 
+#include <limits>
+
 #include <xtensor/xtensor.hpp>
 #include <xtensor/xview.hpp>
 #include <xtensor/xmasked_view.hpp>
@@ -790,7 +792,7 @@ namespace evalhyd
                                 xt::nanmean(
                                         xt::where(
                                                 xt::equal(bs_ref, 0),
-                                                0,
+                                                - std::numeric_limits<double>::infinity(),
                                                 1 - (bs_masked_sampled / bs_ref)
                                         ),
                                         -1
diff --git a/include/evalhyd/detail/probabilist/intervals.hpp b/include/evalhyd/detail/probabilist/intervals.hpp
index d1f451eae73d7ff7b19b62eeaebd8d3b48b93e7a..8d3024634c3088cb06e0e9b293c92ba4e5a0a4f2 100644
--- a/include/evalhyd/detail/probabilist/intervals.hpp
+++ b/include/evalhyd/detail/probabilist/intervals.hpp
@@ -5,6 +5,8 @@
 #ifndef EVALHYD_PROBABILIST_INTERVALS_HPP
 #define EVALHYD_PROBABILIST_INTERVALS_HPP
 
+#include <limits>
+
 #include <xtensor/xtensor.hpp>
 #include <xtensor/xview.hpp>
 #include <xtensor/xindex_view.hpp>
@@ -470,7 +472,9 @@ namespace evalhyd
                     }
                 }
 
-                return (AW / mean_obs);
+                return xt::where(mean_obs > 0,
+                                 AW / mean_obs,
+                                 - std::numeric_limits<double>::infinity());
             }
 
             /// Compute the Average Width Index (AWI).
@@ -496,7 +500,9 @@ namespace evalhyd
                         - xt::view(clim_bnds, xt::all(), xt::all(), xt::all(),
                                    xt::all(), xt::all(), 0);
 
-                return 1 - (AW / AW_clim);
+                return xt::where(AW_clim > 0,
+                                 1 - (AW / AW_clim),
+                                 - std::numeric_limits<double>::infinity());
             }
 
             /// Compute the Winkler scores (WS), also known as interval score.
@@ -623,7 +629,9 @@ namespace evalhyd
                 }
 
                 // compute the Winkler skill score
-                return 1 - (WS / WS_clim);
+                return xt::where(WS_clim > 0,
+                                 1 - (WS / WS_clim),
+                                 - std::numeric_limits<double>::infinity());
             }
         }
     }