/*
* Copyright ( C ) 2016 Apple Inc . All rights reserved .
*
* Redistribution and use in source and binary forms , with or without
* modification , are permitted provided that the following conditions
* are met :
* 1 . Redistributions of source code must retain the above copyright
* notice , this list of conditions and the following disclaimer .
* 2 . 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 .
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC . ` ` 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 APPLE INC . 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 .
*/
"use strict" ;
class Stats {
constructor(cell, prefix)
{
this ._cell = cell;
this ._data = [];
this ._prefix = "" ;
if (!isInBrowser && prefix) {
this ._prefix = prefix + ": " ;
if (this ._prefix.length < 20 )
this ._prefix += " " .repeat(20 - this ._prefix.length);
}
}
reset(...data)
{
this ._data = data;
this ._update();
}
add(...data)
{
this ._data.push(...data);
this ._update();
}
get numIterations() { return this ._data.length; }
valueForIteration(index) { return this ._data[index]; }
get result()
{
var tDistribution = [NaN, NaN, 12 .71 , 4 .30 , 3 .18 , 2 .78 , 2 .57 , 2 .45 , 2 .36 , 2 .31 , 2 .26 , 2 .23 , 2 .20 , 2 .18 , 2 .16 , 2 .14 , 2 .13 , 2 .12 , 2 .11 , 2 .10 , 2 .09 , 2 .09 , 2 .08 , 2 .07 , 2 .07 , 2 .06 , 2 .06 , 2 .06 , 2 .05 , 2 .05 , 2 .05 , 2 .04 , 2 .04 , 2 .04 , 2 .03 , 2 .03 , 2 .03 , 2 .03 , 2 .03 , 2 .02 , 2 .02 , 2 .02 , 2 .02 , 2 .02 , 2 .02 , 2 .02 , 2 .01 , 2 .01 , 2 .01 , 2 .01 , 2 .01 , 2 .01 , 2 .01 , 2 .01 , 2 .01 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 2 .00 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .99 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .98 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .97 , 1 .96 ];
var tMax = tDistribution.length;
var tLimit = 1 .96 ;
function tDist(n)
{
if (n > tMax)
return tLimit;
return tDistribution[n];
}
let sum = 0 ;
let n = 0 ;
for (let datum of this ._data) {
sum += datum;
n++;
}
let mean = sum / n;
if (n <= 2 )
return {n, mean};
let sumForStdDev = 0 ;
for (let datum of this ._data)
sumForStdDev += Math.pow(datum - mean, 2 );
let standardDeviation = Math.sqrt(sumForStdDev / (n - 1 ));
let standardError = standardDeviation / Math.sqrt(n);
let interval = tDist(n) * standardError;
return {n, mean, interval};
}
toString()
{
let result = this .result;
if (!result.n) {
if (isInBrowser)
return `<span class ="value" >\∅ ;</span><span class ="units" >ms</span>`;
return `${this ._prefix}\⬔ ;ms`;
}
if (result.mean != result.mean)
return "ERROR" ;
if ("interval" in result) {
if (isInBrowser)
return `<span class ="value" >${this ._prefix}${result.mean.toFixed(2 )}</span><span class ="margin" > ±${result.interval.toFixed(2 )}</span><span class ="units" >ms</span>`;
return `${this ._prefix}${result.mean.toFixed(2 )} +- ${result.interval.toFixed(2 )} ms`;
}
if (isInBrowser)
return `<span class ="value" >${this ._prefix}${result.mean.toFixed(2 )}</span><span class ="units" >ms</span>`;
return `${this ._prefix}${result.mean.toFixed(2 )} ms`;
}
_update()
{
if (isInBrowser) {
if (this ._cell)
this ._cell.innerHTML = this .toString();
} else
print(this .toString());
}
}
Messung V0.5 in Prozent C=100 H=100 G=100