Skip to content

Commit 36219ae

Browse files
committed
Refactor skewness calculation in central moment accumulators
1 parent 2523ceb commit 36219ae

File tree

3 files changed

+7
-26
lines changed

3 files changed

+7
-26
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/CentralMomentAccumulator.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -175,15 +175,8 @@ public void outputFinal(ColumnBuilder columnBuilder) {
175175
}
176176

177177
if (momentType == MomentType.SKEWNESS) {
178-
if (count < 3) {
179-
columnBuilder.appendNull();
180-
} else {
181-
182-
double variance = m2 / (count - 1);
183-
double stdev = Math.sqrt(variance);
184-
double result = (count * m3) / ((count - 1) * (count - 2) * stdev * stdev * stdev);
185-
columnBuilder.writeDouble(result);
186-
}
178+
double result = Math.sqrt((double) count) * m3 / Math.pow(m2, 1.5);
179+
columnBuilder.writeDouble(result);
187180
} else {
188181
if (count < 4) {
189182
columnBuilder.appendNull();

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/TableCentralMomentAccumulator.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,14 +190,8 @@ public void evaluateFinal(ColumnBuilder columnBuilder) {
190190
}
191191

192192
if (momentType == CentralMomentAccumulator.MomentType.SKEWNESS) {
193-
if (count < 3) {
194-
columnBuilder.appendNull();
195-
} else {
196-
double variance = m2 / (count - 1);
197-
double stdev = Math.sqrt(variance);
198-
double result = (count * m3) / ((count - 1) * (count - 2) * stdev * stdev * stdev);
199-
columnBuilder.writeDouble(result);
200-
}
193+
double result = Math.sqrt((double) count) * m3 / Math.pow(m2, 1.5);
194+
columnBuilder.writeDouble(result);
201195
} else {
202196
if (count < 4) {
203197
columnBuilder.appendNull();

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/grouped/GroupedCentralMomentAccumulator.java

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -240,15 +240,9 @@ public void evaluateFinal(int groupId, ColumnBuilder columnBuilder) {
240240
}
241241

242242
if (momentType == CentralMomentAccumulator.MomentType.SKEWNESS) {
243-
if (count < 3) {
244-
columnBuilder.appendNull();
245-
} else {
246-
double m3 = m3s.get(groupId);
247-
double variance = m2 / (count - 1);
248-
double stdev = Math.sqrt(variance);
249-
double result = (count * m3) / ((count - 1) * (count - 2) * stdev * stdev * stdev);
250-
columnBuilder.writeDouble(result);
251-
}
243+
double m3 = m3s.get(groupId);
244+
double result = Math.sqrt((double) count) * m3 / Math.pow(m2, 1.5);
245+
columnBuilder.writeDouble(result);
252246
} else {
253247
if (count < 4) {
254248
columnBuilder.appendNull();

0 commit comments

Comments
 (0)