mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-03 15:45:46 +08:00
Ref T261, aircraft changes class reflecting delta/average values
* math utils for standard deviation etc. * CAircraftSituationChange value class
This commit is contained in:
committed by
Roland Winklmeier
parent
d1f5635bd1
commit
784cf29af5
@@ -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
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "blackmisc/blackmiscexport.h"
|
||||
|
||||
#include <QtCore/qmath.h>
|
||||
#include <QPair>
|
||||
#include <cmath>
|
||||
|
||||
namespace BlackMisc
|
||||
@@ -25,7 +26,6 @@ namespace BlackMisc
|
||||
class BLACKMISC_EXPORT CMathUtils
|
||||
{
|
||||
public:
|
||||
|
||||
//! No objects, just static
|
||||
CMathUtils() = delete;
|
||||
|
||||
@@ -108,12 +108,37 @@ namespace BlackMisc
|
||||
//! Random number between low and high
|
||||
static int randomInteger(int low, int high);
|
||||
|
||||
//! Random double 0-max
|
||||
static double randomDouble(double max = 1);
|
||||
|
||||
//! Round numToRound to the nearest multiple of divisor
|
||||
static int roundToMultipleOf(int value, int divisor);
|
||||
|
||||
//! Fractional part as integer string, e.g. 3.12 -> 12 / 3.012 -> 012
|
||||
//! \remark because of leading 0 returned as string
|
||||
static QString fractionalPartAsString(double value, int width = -1);
|
||||
|
||||
//! Calculate the sum
|
||||
static double sum(const QList<double> &values);
|
||||
|
||||
//! Calculate the mean
|
||||
static double mean(const QList<double> &values);
|
||||
|
||||
//! Calculate the standard deviation
|
||||
static double standardDeviation(const QList<double> &values);
|
||||
|
||||
//! Standard deviation (first) and mean (second)
|
||||
static QPair<double, double> standardDeviationAndMean(const QList<double> &values);
|
||||
|
||||
private:
|
||||
//! Calculate the variance
|
||||
static double variance(const QList<double> &values);
|
||||
|
||||
//! The squared differences to mean
|
||||
static QList<double> squaredDifferences(const QList<double> &values);
|
||||
|
||||
//! The squared differences to mean
|
||||
static QList<double> squaredDifferences(const QList<double> &values, double meanValue);
|
||||
};
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
||||
Reference in New Issue
Block a user