You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2022/05/02 09:36:53 UTC
[iotdb] 03/03: roundWithGivenPrecision
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch memtsblock
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit e66a4d5c731b5e66c877023feb3b3ed57cf52d43
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon May 2 17:36:21 2022 +0800
roundWithGivenPrecision
---
.../apache/iotdb/db/utils/datastructure/DoubleTVList.java | 12 ++++++++++++
.../org/apache/iotdb/db/utils/datastructure/FloatTVList.java | 12 ++++++++++++
2 files changed, 24 insertions(+)
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
index 517bd5a574..9abb886a70 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
@@ -213,14 +213,26 @@ public class DoubleTVList extends TVList {
ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
for (int i = 0; i < timestamps.size() - 1; i++) {
timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ getValuesWithGivenPrecision(values.get(i), floatPrecision, encoding);
valueBuilder.writeDoubles(values.get(i), ARRAY_SIZE);
}
timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ getValuesWithGivenPrecision(values.get(values.size() - 1), floatPrecision, encoding);
valueBuilder.writeDoubles(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
builder.declarePositions(size);
return builder.build();
}
+ private void getValuesWithGivenPrecision(double[] values, int floatPrecision, TSEncoding encoding) {
+ if (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF) {
+ for (int i = 0; i < values.length; i++) {
+ if (!Double.isNaN(values[i])) {
+ values[i] = MathUtils.roundWithGivenPrecision(values[i], floatPrecision);
+ }
+ }
+ }
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
index df5eaa4029..31eb193699 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
@@ -213,14 +213,26 @@ public class FloatTVList extends TVList {
ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
for (int i = 0; i < timestamps.size() - 1; i++) {
timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ getValuesWithGivenPrecision(values.get(i), floatPrecision, encoding);
valueBuilder.writeFloats(values.get(i), ARRAY_SIZE);
}
timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ getValuesWithGivenPrecision(values.get(values.size() - 1), floatPrecision, encoding);
valueBuilder.writeFloats(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
builder.declarePositions(size);
return builder.build();
}
+ private void getValuesWithGivenPrecision(float[] values, int floatPrecision, TSEncoding encoding) {
+ if (encoding == TSEncoding.RLE || encoding == TSEncoding.TS_2DIFF) {
+ for (int i = 0; i < values.length; i++) {
+ if (!Float.isNaN(values[i])) {
+ values[i] = MathUtils.roundWithGivenPrecision(values[i], floatPrecision);
+ }
+ }
+ }
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));