⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 statistical_filter.cc

📁 这是一个著名的应用层组播中间件的源码
💻 CC
字号:
//Copyright (c) 2004, Charles Killian, Adolfo Rodriguez, Dejan Kostic, Sooraj Bhat, and Amin Vahdat//All rights reserved.////Redistribution and use in source and binary forms, with or without//modification, are permitted provided that the following conditions are met:////   * Redistributions of source code must retain the above copyright//     notice, this list of conditions and the following disclaimer.//   * Redistributions in binary form must reproduce the above copyright//     notice, this list of conditions and the following disclaimer in//     the documentation and/or other materials provided with the//     distribution.//   * Neither the names of Duke University nor The University of//     California, San Diego, nor the names of its contributors//     may be used to endorse or promote products derived from//     this software without specific prior written permission.////THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"//AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE//IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE//DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE//FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL//DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR//SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER//CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,//OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE//USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.#include "statistical_filter.h"#include "stdio.h"#include <math.h>statistical_filter::statistical_filter(int history)  :measurements( 0), total( 0), total_square( 0),standard_deviation (0),keep_history(history){}statistical_filter::~statistical_filter(){}// ---------------------------------------------- // update// ---------------------------------------------- void  statistical_filter::update (double incoming){  total+= incoming;  total_square+= incoming*incoming;  measurements ++;  standard_deviation =sqrt( 			   (total_square* measurements-			    (total*total))/			   ( measurements*( measurements - 1))			   );  value =total/( double)measurements;//  printf("statistical_value: %lf, incoming  %lf\n", //         value, incoming);  if (keep_history)    {      contents.insert( incoming);    }}// ---------------------------------------------- // get_deviation// ----------------------------------------------  double  statistical_filter::get_deviation (){  return standard_deviation;}// ---------------------------------------------- // get_percentile// ---------------------------------------------- double  statistical_filter::get_percentile (double rank){  if (rank < 0 || rank > 1.0)    {      fprintf(stderr, "get_percentile invalid rank: %d\n", rank);      return -1;    }  if (!keep_history)    {      fprintf(stderr, "get_percentile not maintaining history: %d\n", keep_history);      return -1;    }  if (contents.size() == 0)    {      //      fprintf(stderr, " get_percentilecontents.size(): %d\n", contents.size());      return -1;    }  int which = (int)((double)(contents.size()-1)*rank); //The -1 is because it is 0 indexed   //printf("which: %d out of %d %f \n", which, contents.size(), rank);  set<double, less<double> >::const_iterator element;  int counter = 0;  for(element=contents.begin();element!=contents.end();element++)    {      //printf("looking at %f (%d) -- ", *element, counter);      if (counter == which)	{	  return *element;	}      counter++;    }  //somehow we got here, return the largest value  return *((contents.end())--);}// ---------------------------------------------- // get_count// ---------------------------------------------- int  statistical_filter::get_count (){  return measurements;}// ---------------------------------------------- // reset// ---------------------------------------------- int  statistical_filter::reset (){  measurements = 0;  value = 0;  total = 0;  total_square = 0;  standard_deviation= 0;  contents.clear();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -