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()); } } }