Fleet  0.0.9
Inference in the LOT
MedianFAME.h
Go to the documentation of this file.
1 #pragma once
2 
3 
15 template<typename T>
16 class MedianFAME {
17 public:
18 
19  T M;
20  size_t n;
21  T step;
22 
23  MedianFAME() : M(0.0), n(0), step(NaN) {
24  }
25 
26  T median() const {
27  if(n == 0)
28  return NaN;
29  else
30  return M;
31  }
32 
33  void add(T x) {
34 
35  if(n == 0) {
36  M = x;
37  step = sqrt(abs(x)); // seems bad to initialize at x b/c then we start with giant sign swings; sqrt has a nice aesthetic
38  }
39  else {
40 
41  if(x > M) {
42  M += step;
43  }
44  else if(x <= M) {
45  M -= step;
46  }
47 
48  if(abs(x-M) < step) {
49  step = step/2.0;
50  }
51  }
52  ++n;
53  }
54  void operator<<(T x) { add(x);}
55 
56 
57 };
58 
T step
Definition: MedianFAME.h:21
void add(T x)
Definition: MedianFAME.h:33
MedianFAME()
Definition: MedianFAME.h:23
void operator<<(T x)
Definition: MedianFAME.h:54
size_t n
Definition: MedianFAME.h:20
T median() const
Definition: MedianFAME.h:26
T M
Definition: MedianFAME.h:19
Definition: MedianFAME.h:16
constexpr double NaN
Definition: Numerics.h:21