#3748 Statistics calculators : Improve handling of invalid numbers

This commit is contained in:
Magne Sjaastad 2018-11-23 10:13:58 +01:00
parent f9a6957fae
commit 200e6d229b
3 changed files with 33 additions and 37 deletions

View File

@ -42,7 +42,7 @@ void RigStatisticsMath::calculateBasicStatistics(const std::vector<double>& valu
for (size_t i = 0; i < values.size(); i++)
{
double val = values[i];
if (val == HUGE_VAL) continue;
if (RiaStatisticsTools::isInvalidNumber<double>(val)) continue;
validValueCount++;
@ -57,7 +57,6 @@ void RigStatisticsMath::calculateBasicStatistics(const std::vector<double>& valu
{
m_mean = m_sum / validValueCount;
// http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods
// Running standard deviation
@ -91,7 +90,7 @@ std::vector<double> RigStatisticsMath::calculateNearestRankPercentiles(const std
for (size_t i = 0; i < inputValues.size(); ++i)
{
if (inputValues[i] != HUGE_VAL)
if (RiaStatisticsTools::isValidNumber<double>(inputValues[i]))
{
sortedValues.push_back(inputValues[i]);
}
@ -130,7 +129,7 @@ std::vector<double> RigStatisticsMath::calculateInterpolatedPercentiles(const st
for (size_t i = 0; i < inputValues.size(); ++i)
{
if (inputValues[i] != HUGE_VAL)
if (RiaStatisticsTools::isValidNumber<double>(inputValues[i]))
{
sortedValues.push_back(inputValues[i]);
}
@ -195,10 +194,7 @@ RigHistogramCalculator::RigHistogramCalculator(double min, double max, size_t nB
//--------------------------------------------------------------------------------------------------
void RigHistogramCalculator::addValue(double value)
{
if (value == HUGE_VAL || value != value)
{
return;
}
if (RiaStatisticsTools::isInvalidNumber<double>(value)) return;
size_t index = 0;
@ -262,5 +258,6 @@ double RigHistogramCalculator::calculatePercentil(double pVal)
}
}
assert(false);
return HUGE_VAL;
}

View File

@ -17,6 +17,8 @@
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "RiaStatisticsTools.h"
#include <vector>
#include <set>
#include <cmath>
@ -82,19 +84,17 @@ public:
void addValue(double value)
{
if (value == HUGE_VAL) // TODO
if (RiaStatisticsTools::isValidNumber<double>(value))
{
return;
}
if (value < min)
{
min = value;
}
if (value < min)
{
min = value;
}
if (value > max)
{
max = value;
if (value > max)
{
max = value;
}
}
}
@ -126,19 +126,17 @@ public:
void addValue(double value)
{
if (value == HUGE_VAL)
if (RiaStatisticsTools::isValidNumber<double>(value))
{
return;
}
if (value < pos && value > 0)
{
pos = value;
}
if (value < pos && value > 0)
{
pos = value;
}
if (value > neg && value < 0)
{
neg = value;
if (value > neg && value < 0)
{
neg = value;
}
}
}
@ -170,13 +168,11 @@ public:
void addValue(double value)
{
if (value == HUGE_VAL || value != value)
if (RiaStatisticsTools::isValidNumber<double>(value))
{
return;
valueSum += value;
++sampleCount;
}
valueSum += value;
++sampleCount;
}
double valueSum;
@ -208,7 +204,10 @@ public:
void addValue(double value)
{
uniqueValues.insert(static_cast<int>(value));
if (RiaStatisticsTools::isValidNumber<double>(value))
{
uniqueValues.insert(static_cast<int>(value));
}
}
std::set<int> uniqueValues;

View File

@ -225,6 +225,6 @@ TEST(RigStatisticsMath, Accumulators)
EXPECT_FALSE(std::isinf(acc.valueSum));
EXPECT_DOUBLE_EQ(sum, acc.valueSum);
EXPECT_EQ(4, acc.sampleCount);
EXPECT_EQ(4u, acc.sampleCount);
}
}