Initial
This commit is contained in:
parent
86d60d821a
commit
87fe9be021
47
FastRngTests/Double/RunningStatistics.cs
Normal file
47
FastRngTests/Double/RunningStatistics.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace FastRngTests.Double
|
||||||
|
{
|
||||||
|
internal sealed class RunningStatistics
|
||||||
|
{
|
||||||
|
private double previousM;
|
||||||
|
private double previousS;
|
||||||
|
private double nextM;
|
||||||
|
private double nextS;
|
||||||
|
|
||||||
|
public RunningStatistics()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public int NumberRecords { get; private set; } = 0;
|
||||||
|
|
||||||
|
public void Clear() => this.NumberRecords = 0;
|
||||||
|
|
||||||
|
public void Push(double x)
|
||||||
|
{
|
||||||
|
this.NumberRecords++;
|
||||||
|
|
||||||
|
// See Knuth TAOCP vol 2, 3rd edition, page 232
|
||||||
|
if (this.NumberRecords == 1)
|
||||||
|
{
|
||||||
|
previousM = nextM = x;
|
||||||
|
previousS = 0.0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nextM = previousM + (x - previousM) / this.NumberRecords;
|
||||||
|
nextS = previousS + (x - previousM) * (x - nextM);
|
||||||
|
|
||||||
|
// set up for next iteration
|
||||||
|
previousM = nextM;
|
||||||
|
previousS = nextS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public double Mean => this.NumberRecords > 0 ? nextM : 0.0;
|
||||||
|
|
||||||
|
public double Variance => this.NumberRecords > 1 ? nextS / (NumberRecords - 1) : 0.0;
|
||||||
|
|
||||||
|
public double StandardDeviation => Math.Sqrt(this.Variance);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user