mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#3748 Statistics calculators : Improve handling of invalid numbers
This commit is contained in:
parent
f9a6957fae
commit
200e6d229b
@ -42,7 +42,7 @@ void RigStatisticsMath::calculateBasicStatistics(const std::vector<double>& valu
|
|||||||
for (size_t i = 0; i < values.size(); i++)
|
for (size_t i = 0; i < values.size(); i++)
|
||||||
{
|
{
|
||||||
double val = values[i];
|
double val = values[i];
|
||||||
if (val == HUGE_VAL) continue;
|
if (RiaStatisticsTools::isInvalidNumber<double>(val)) continue;
|
||||||
|
|
||||||
validValueCount++;
|
validValueCount++;
|
||||||
|
|
||||||
@ -57,7 +57,6 @@ void RigStatisticsMath::calculateBasicStatistics(const std::vector<double>& valu
|
|||||||
{
|
{
|
||||||
m_mean = m_sum / validValueCount;
|
m_mean = m_sum / validValueCount;
|
||||||
|
|
||||||
|
|
||||||
// http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods
|
// http://en.wikipedia.org/wiki/Standard_deviation#Rapid_calculation_methods
|
||||||
// Running standard deviation
|
// Running standard deviation
|
||||||
|
|
||||||
@ -91,7 +90,7 @@ std::vector<double> RigStatisticsMath::calculateNearestRankPercentiles(const std
|
|||||||
|
|
||||||
for (size_t i = 0; i < inputValues.size(); ++i)
|
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]);
|
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)
|
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]);
|
sortedValues.push_back(inputValues[i]);
|
||||||
}
|
}
|
||||||
@ -195,10 +194,7 @@ RigHistogramCalculator::RigHistogramCalculator(double min, double max, size_t nB
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RigHistogramCalculator::addValue(double value)
|
void RigHistogramCalculator::addValue(double value)
|
||||||
{
|
{
|
||||||
if (value == HUGE_VAL || value != value)
|
if (RiaStatisticsTools::isInvalidNumber<double>(value)) return;
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t index = 0;
|
size_t index = 0;
|
||||||
|
|
||||||
@ -262,5 +258,6 @@ double RigHistogramCalculator::calculatePercentil(double pVal)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(false);
|
assert(false);
|
||||||
|
|
||||||
return HUGE_VAL;
|
return HUGE_VAL;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,8 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////////
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "RiaStatisticsTools.h"
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@ -82,19 +84,17 @@ public:
|
|||||||
|
|
||||||
void addValue(double value)
|
void addValue(double value)
|
||||||
{
|
{
|
||||||
if (value == HUGE_VAL) // TODO
|
if (RiaStatisticsTools::isValidNumber<double>(value))
|
||||||
{
|
{
|
||||||
return;
|
if (value < min)
|
||||||
}
|
{
|
||||||
|
min = value;
|
||||||
|
}
|
||||||
|
|
||||||
if (value < min)
|
if (value > max)
|
||||||
{
|
{
|
||||||
min = value;
|
max = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value > max)
|
|
||||||
{
|
|
||||||
max = value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,19 +126,17 @@ public:
|
|||||||
|
|
||||||
void addValue(double value)
|
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)
|
if (value > neg && value < 0)
|
||||||
{
|
{
|
||||||
pos = value;
|
neg = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value > neg && value < 0)
|
|
||||||
{
|
|
||||||
neg = value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -170,13 +168,11 @@ public:
|
|||||||
|
|
||||||
void addValue(double value)
|
void addValue(double value)
|
||||||
{
|
{
|
||||||
if (value == HUGE_VAL || value != value)
|
if (RiaStatisticsTools::isValidNumber<double>(value))
|
||||||
{
|
{
|
||||||
return;
|
valueSum += value;
|
||||||
|
++sampleCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
valueSum += value;
|
|
||||||
++sampleCount;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double valueSum;
|
double valueSum;
|
||||||
@ -208,7 +204,10 @@ public:
|
|||||||
|
|
||||||
void addValue(double value)
|
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;
|
std::set<int> uniqueValues;
|
||||||
|
@ -225,6 +225,6 @@ TEST(RigStatisticsMath, Accumulators)
|
|||||||
EXPECT_FALSE(std::isinf(acc.valueSum));
|
EXPECT_FALSE(std::isinf(acc.valueSum));
|
||||||
|
|
||||||
EXPECT_DOUBLE_EQ(sum, acc.valueSum);
|
EXPECT_DOUBLE_EQ(sum, acc.valueSum);
|
||||||
EXPECT_EQ(4, acc.sampleCount);
|
EXPECT_EQ(4u, acc.sampleCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user