download
raw
1.24 kB
/*
* compute an Exponential Weighted moving average
* - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average
* - heavily inspired from shaka-player
*/
class EWMA {
public readonly halfLife: number;
private alpha_: number;
private estimate_: number;
private totalWeight_: number;
// About half of the estimated value will be from the last |halfLife| samples by weight.
constructor(halfLife: number, estimate: number = 0, weight: number = 0) {
this.halfLife = halfLife;
// Larger values of alpha expire historical data more slowly.
this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;
this.estimate_ = estimate;
this.totalWeight_ = weight;
}
sample(weight: number, value: number) {
const adjAlpha = Math.pow(this.alpha_, weight);
this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;
this.totalWeight_ += weight;
}
getTotalWeight(): number {
return this.totalWeight_;
}
getEstimate(): number {
if (this.alpha_) {
const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);
if (zeroFactor) {
return this.estimate_ / zeroFactor;
}
}
return this.estimate_;
}
}
export default EWMA;

Xet Storage Details

Size:
1.24 kB
·
Xet hash:
2d2318c127cc5e2ef9f37f09fea9a4c64ad71bf3badac669c1547e798a305a28

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.