94 mMin = std::min( mMin, value );
95 mMax = std::max( mMax, value );
99 mValueCount.insert( value, mValueCount.value( value, 0 ) + 1 );
101 if ( mRequiresAllValueStorage )
124 mFirst = std::numeric_limits<double>::quiet_NaN();
125 mLast = std::numeric_limits<double>::quiet_NaN();
126 mMin = std::numeric_limits<double>::quiet_NaN();
127 mMax = std::numeric_limits<double>::quiet_NaN();
128 mMean = std::numeric_limits<double>::quiet_NaN();
129 mMedian = std::numeric_limits<double>::quiet_NaN();
130 mStdev = std::numeric_limits<double>::quiet_NaN();
131 mSampleStdev = std::numeric_limits<double>::quiet_NaN();
132 mMinority = std::numeric_limits<double>::quiet_NaN();
133 mMajority = std::numeric_limits<double>::quiet_NaN();
134 mFirstQuartile = std::numeric_limits<double>::quiet_NaN();
135 mThirdQuartile = std::numeric_limits<double>::quiet_NaN();
139 mMean = mSum / mCount;
143 double sumSquared = 0;
144 const auto constMValues = mValues;
145 for (
const double value : constMValues )
147 const double diff = value - mMean;
148 sumSquared += diff * diff;
150 mStdev = std::pow( sumSquared / mValues.count(), 0.5 );
151 mSampleStdev = std::pow( sumSquared / ( mValues.count() - 1 ), 0.5 );
159 std::sort( mValues.begin(), mValues.end() );
160 const bool even = ( mCount % 2 ) < 1;
163 mMedian = ( mValues[mCount / 2 - 1] + mValues[mCount / 2] ) / 2.0;
167 mMedian = mValues[( mCount + 1 ) / 2 - 1];
174 if ( ( mCount % 2 ) < 1 )
176 const int halfCount = mCount / 2;
177 const bool even = ( halfCount % 2 ) < 1;
180 mFirstQuartile = ( mValues[halfCount / 2 - 1] + mValues[halfCount / 2] ) / 2.0;
184 mFirstQuartile = mValues[( halfCount + 1 ) / 2 - 1];
189 const int halfCount = mCount / 2 + 1;
190 const bool even = ( halfCount % 2 ) < 1;
193 mFirstQuartile = ( mValues[halfCount / 2 - 1] + mValues[halfCount / 2] ) / 2.0;
197 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() ) );