#include #include #include #include "util.h" namespace AHFinderDirect { namespace jtutil { template norm::norm() : N_(0L), sum_(0.0), sum2_(0.0), max_abs_value_(0.0), min_abs_value_(0.0), max_value_(0.0), min_value_(0.0) { } template void norm::reset() { N_ = 0L; sum_ = 0.0; sum2_ = 0.0; max_abs_value_ = 0.0; min_abs_value_ = 0.0; max_value_ = 0.0; min_value_ = 0.0; } template void norm::data(fp_t x) { sum_ += x; sum2_ += x * x; const fp_t abs_x = jtutil::abs(x); max_abs_value_ = jtutil::tmax(max_abs_value_, abs_x); min_abs_value_ = (N_ == 0) ? abs_x : jtutil::tmin(min_abs_value_, abs_x); min_value_ = (N_ == 0) ? x : jtutil::tmin(min_value_, x); max_value_ = (N_ == 0) ? x : jtutil::tmax(max_value_, x); ++N_; } template fp_t norm::mean() const { return sum_ / fp_t(N_); } template fp_t norm::two_norm() const { return sqrt(sum2_); } template fp_t norm::rms_norm() const { assert(is_nonempty()); return sqrt(sum2_ / fp_t(N_)); } template class jtutil::norm; template class jtutil::norm; //****************************************************************************** //****************************************************************************** //****************************************************************************** } // namespace jtutil } // namespace AHFinderDirect