27 #ifndef MLN_ACCU_STAT_MEDIAN_ALT_HH
28 # define MLN_ACCU_STAT_MEDIAN_ALT_HH
34 # include <mln/accu/internal/base.hh>
35 # include <mln/accu/histo.hh>
62 void take(const argument& t);
63 void untake(const argument& t);
112 template <
typename T>
130 template <
typename T>
138 # ifndef MLN_INCLUDE_ONLY
143 template <
typename S>
153 template <
typename S>
156 median_alt<S>::take(
const argument& t)
182 if (2 * sum_minus_ > h_.sum())
189 if (2 * sum_plus_ > h_.sum())
195 template <
typename S>
198 median_alt<S>::untake(
const argument& t)
200 mln_precondition(h_(t) != 0);
217 if (2 * sum_plus_ > h_.sum())
223 if (2 * sum_minus_ > h_.sum())
232 if (sum_plus_ > sum_minus_)
239 if (2 * sum_plus_ > h_.sum())
241 else if (2 * sum_minus_ > h_.sum())
248 template <
typename S>
251 median_alt<S>::init()
256 i_ = (mln_max(argument) - mln_min(argument)) / 2;
260 template <
typename S>
262 const typename median_alt<S>::argument&
263 median_alt<S>::to_result()
const
268 template <
typename S>
271 median_alt<S>::is_valid()
const
276 template <
typename S>
279 median_alt<S>::go_minus_()
287 sum_minus_ -= h_[i_];
289 while (2 * sum_minus_ > h_.sum());
294 template <
typename S>
297 median_alt<S>::go_plus_()
301 sum_minus_ += h_[i_];
307 while (2 * sum_plus_ > h_.sum());
311 template <
typename S>
313 std::ostream& operator<<(std::ostream& ostr, const median_alt<S>& m)
315 return ostr << m.to_result();
320 # endif // ! MLN_INCLUDE_ONLY
327 #endif // ! MLN_ACCU_STAT_MEDIAN_ALT_HH