99 mMin = std::min( mMin, value );
100 mMax = std::max( mMax, value );
103 if ( mRequiresHisto )
104 mValueCount.insert( value, mValueCount.value( value, 0 ) + 1 );
106 if ( mRequiresAllValueStorage )
129 mFirst = std::numeric_limits<double>::quiet_NaN();
130 mLast = std::numeric_limits<double>::quiet_NaN();
131 mMin = std::numeric_limits<double>::quiet_NaN();
132 mMax = std::numeric_limits<double>::quiet_NaN();
133 mMean = std::numeric_limits<double>::quiet_NaN();
134 mMedian = std::numeric_limits<double>::quiet_NaN();
135 mStdev = std::numeric_limits<double>::quiet_NaN();
136 mSampleStdev = std::numeric_limits<double>::quiet_NaN();
137 mMinority = std::numeric_limits<double>::quiet_NaN();
138 mMajority = std::numeric_limits<double>::quiet_NaN();
139 mFirstQuartile = std::numeric_limits<double>::quiet_NaN();
140 mThirdQuartile = std::numeric_limits<double>::quiet_NaN();
144 mMean = mSum / mCount;
148 double sumSquared = 0;
149 const auto constMValues = mValues;
150 for (
const double value : constMValues )
152 const double diff = value - mMean;
153 sumSquared += diff * diff;
155 mStdev = std::pow( sumSquared / mValues.count(), 0.5 );
156 mSampleStdev = std::pow( sumSquared / ( mValues.count() - 1 ), 0.5 );
161 std::sort( mValues.begin(), mValues.end() );
162 const bool even = ( mCount % 2 ) < 1;
165 mMedian = ( mValues[mCount / 2 - 1] + mValues[mCount / 2] ) / 2.0;
169 mMedian = mValues[( mCount + 1 ) / 2 - 1];
175 if ( ( mCount % 2 ) < 1 )
177 const int halfCount = mCount / 2;
178 const bool even = ( halfCount % 2 ) < 1;
181 mFirstQuartile = ( mValues[halfCount / 2 - 1] + mValues[halfCount / 2] ) / 2.0;
185 mFirstQuartile = mValues[( halfCount + 1 ) / 2 - 1];
190 const int halfCount = mCount / 2 + 1;
191 const bool even = ( halfCount % 2 ) < 1;
194 mFirstQuartile = ( mValues[halfCount / 2 - 1] + mValues[halfCount / 2] ) / 2.0;
198 mFirstQuartile = mValues[( halfCount + 1 ) / 2 - 1];
205 if ( ( mCount % 2 ) < 1 )
207 const int halfCount = mCount / 2;
208 const bool even = ( halfCount % 2 ) < 1;
211 mThirdQuartile = ( mValues[halfCount + halfCount / 2 - 1] + mValues[halfCount + halfCount / 2] ) / 2.0;
215 mThirdQuartile = mValues[( halfCount + 1 ) / 2 - 1 + halfCount];
220 const int halfCount = mCount / 2 + 1;
221 const bool even = ( halfCount % 2 ) < 1;
224 mThirdQuartile = ( mValues[halfCount + halfCount / 2 - 2] + mValues[halfCount + halfCount / 2 - 1] ) / 2.0;
228 mThirdQuartile = mValues[( halfCount + 1 ) / 2 - 2 + halfCount];
235 QList<int> valueCounts = mValueCount.values();
239 mMinority = mValueCount.key( *std::min_element( valueCounts.begin(), valueCounts.end() ) );
243 mMajority = mValueCount.key( *std::max_element( valueCounts.begin(), valueCounts.end() ) );