Ref T261, aircraft changes class reflecting delta/average values

* math utils for standard deviation etc.
* CAircraftSituationChange value class
This commit is contained in:
Klaus Basan
2018-04-27 02:27:03 +02:00
committed by Roland Winklmeier
parent d1f5635bd1
commit 784cf29af5
7 changed files with 514 additions and 7 deletions

View File

@@ -8,6 +8,7 @@
*/
#include "blackmisc/math/mathutils.h"
#include "blackmisc/verify.h"
#include <QThreadStorage>
#include <QTime>
@@ -110,6 +111,13 @@ namespace BlackMisc
return r % ((high + 1) - low) + low;
}
double CMathUtils::randomDouble(double max)
{
static const int MAX(INT_MAX);
const double r = randomInteger(0, MAX);
return (r / MAX) * max;
}
int CMathUtils::roundToMultipleOf(int value, int divisor)
{
Q_ASSERT(divisor != 0);
@@ -136,5 +144,55 @@ namespace BlackMisc
if (fInt.length() >= width) { return fInt.left(width); }
return fInt.leftJustified(width, '0');
}
double CMathUtils::sum(const QList<double> &values)
{
double sum = 0;
for (double v : values) { sum += v; }
return sum;
}
QList<double> CMathUtils::squaredDifferences(const QList<double> &values)
{
const double meanValue = mean(values);
return squaredDifferences(values, meanValue);
}
QList<double> CMathUtils::squaredDifferences(const QList<double> &values, double meanValue)
{
QList<double> squaresDifferences;
for (double v : values)
{
const double vd = v - meanValue;
squaresDifferences.push_back(vd * vd);
}
return squaresDifferences;
}
double CMathUtils::mean(const QList<double> &values)
{
BLACK_VERIFY_X(!values.isEmpty(), Q_FUNC_INFO, "Need values");
return sum(values) / values.size();
}
double CMathUtils::variance(const QList<double> &values)
{
const double variance = mean(squaredDifferences(values));
return variance;
}
double CMathUtils::standardDeviation(const QList<double> &values)
{
const double sd = sqrt(variance(values));
return sd;
}
QPair<double, double> CMathUtils::standardDeviationAndMean(const QList<double> &values)
{
const double meanValue = mean(values);
const double varianceValue = mean(squaredDifferences(values, meanValue));
const double sd = sqrt(varianceValue);
return QPair<double, double>(sd, meanValue);
}
} // namespace
} // namespace