stats.hpp
来自「Boost provides free peer-reviewed portab」· HPP 代码 · 共 89 行
HPP
89 行
// (C) Copyright John Maddock 2005-2006.// Use, modification and distribution are subject to the// Boost Software License, Version 1.0. (See accompanying file// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#ifndef BOOST_MATH_TOOLS_STATS_INCLUDED#define BOOST_MATH_TOOLS_STATS_INCLUDED#ifdef _MSC_VER#pragma once#endif#include <boost/config/no_tr1/cmath.hpp>#include <boost/cstdint.hpp>#include <boost/math/tools/precision.hpp>namespace boost{ namespace math{ namespace tools{template <class T>class stats{public: stats() : m_min(tools::max_value<T>()), m_max(-tools::max_value<T>()), m_total(0), m_squared_total(0), m_count(0) {} void add(const T& val) { if(val < m_min) m_min = val; if(val > m_max) m_max = val; m_total += val; ++m_count; m_squared_total += val*val; } T min BOOST_PREVENT_MACRO_SUBSTITUTION()const{ return m_min; } T max BOOST_PREVENT_MACRO_SUBSTITUTION()const{ return m_max; } T total()const{ return m_total; } T mean()const{ return m_total / static_cast<T>(m_count); } boost::uintmax_t count()const{ return m_count; } T variance()const { BOOST_MATH_STD_USING T t = m_squared_total - m_total * m_total / m_count; t /= m_count; return t; } T variance1()const { BOOST_MATH_STD_USING T t = m_squared_total - m_total * m_total / m_count; t /= (m_count-1); return t; } T rms()const { BOOST_MATH_STD_USING return sqrt(m_squared_total / static_cast<T>(m_count)); } stats& operator+=(const stats& s) { if(s.m_min < m_min) m_min = s.m_min; if(s.m_max > m_max) m_max = s.m_max; m_total += s.m_total; m_squared_total += s.m_squared_total; m_count += s.m_count; return *this; }private: T m_min, m_max, m_total, m_squared_total; boost::uintmax_t m_count;};} // namespace tools} // namespace math} // namespace boost#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?