diff --git a/lib/histogram.js b/lib/histogram.js index 91c77cd..fe467f8 100644 --- a/lib/histogram.js +++ b/lib/histogram.js @@ -112,11 +112,14 @@ class StatisticalHistogram { } calculateStd() { - const avgSquares = this.all.reduce( - (acc, value) => Math.min(Number.MAX_SAFE_INTEGER, Math.pow(value, 2) + acc), 0, - ) * (1 / this.all.length); - - this.stddev = Math.sqrt(Math.max(0, this.all.length / (this.all.length - 1) * (avgSquares - (this.mean * this.mean)))); + if (this.all.length < 2) { + this.stddev = 0; + return; + } + const variance = this.all.reduce((acc, value) => { + return acc + Math.pow(value - this.mean, 2); + }, 0) / (this.all.length - 1); + this.stddev = Math.sqrt(variance); } /** @@ -125,7 +128,7 @@ class StatisticalHistogram { * - https://github.com/google/benchmark/blob/159eb2d0ffb85b86e00ec1f983d72e72009ec387/src/statistics.ccL81-L88 */ calculateCv() { - if (this.all.length < 2) { + if (this.all.length < 2 || this.mean === 0) { this.cv = 0; return; }