You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by ku...@apache.org on 2017/07/13 10:13:46 UTC
flink git commit: [FLINK-7161] Fix misusage of Float.MIN_VALUE and
Double.MIN_VALUE
Repository: flink
Updated Branches:
refs/heads/master 40b8f1b85 -> 9bfc927ea
[FLINK-7161] Fix misusage of Float.MIN_VALUE and Double.MIN_VALUE
fix float overflow checks
use POSITIVE_INFINITY instead of MAX_VALUE
change float overflows and underflows checks
This closes #4305.
Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/9bfc927e
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/9bfc927e
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/9bfc927e
Branch: refs/heads/master
Commit: 9bfc927eae9a14ecade64f213d97692a1ea29d35
Parents: 40b8f1b
Author: Kurt Young <yk...@gmail.com>
Authored: Wed Jul 12 14:02:58 2017 +0800
Committer: Kurt Young <ku...@apache.org>
Committed: Thu Jul 13 18:12:22 2017 +0800
----------------------------------------------------------------------
.../flink/configuration/Configuration.java | 4 +++-
.../flink/configuration/ConfigurationTest.java | 22 +++++++++++++++++++-
.../aggregation/DoubleSummaryAggregator.java | 4 ++--
.../aggregation/FloatSummaryAggregator.java | 4 ++--
.../DoubleSummaryAggregatorTest.java | 1 +
.../aggregation/FloatSummaryAggregatorTest.java | 1 +
6 files changed, 30 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flink/blob/9bfc927e/flink-core/src/main/java/org/apache/flink/configuration/Configuration.java
----------------------------------------------------------------------
diff --git a/flink-core/src/main/java/org/apache/flink/configuration/Configuration.java b/flink-core/src/main/java/org/apache/flink/configuration/Configuration.java
index a1da5b3..d6f1dec 100644
--- a/flink-core/src/main/java/org/apache/flink/configuration/Configuration.java
+++ b/flink-core/src/main/java/org/apache/flink/configuration/Configuration.java
@@ -843,7 +843,9 @@ public class Configuration extends ExecutionConfig.GlobalJobParameters
}
else if (o.getClass() == Double.class) {
double value = ((Double) o);
- if (value <= Float.MAX_VALUE && value >= Float.MIN_VALUE) {
+ if (value == 0.0
+ || (value >= Float.MIN_VALUE && value <= Float.MAX_VALUE)
+ || (value >= -Float.MAX_VALUE && value <= -Float.MIN_VALUE)) {
return (float) value;
} else {
LOG.warn("Configuration value {} overflows/underflows the float type.", value);
http://git-wip-us.apache.org/repos/asf/flink/blob/9bfc927e/flink-core/src/test/java/org/apache/flink/configuration/ConfigurationTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/configuration/ConfigurationTest.java b/flink-core/src/test/java/org/apache/flink/configuration/ConfigurationTest.java
index 91c5f65..fa86fed 100644
--- a/flink-core/src/test/java/org/apache/flink/configuration/ConfigurationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/configuration/ConfigurationTest.java
@@ -85,6 +85,8 @@ public class ConfigurationTest extends TestLogger {
pc.setLong("too_long", TOO_LONG);
pc.setFloat("float", 2.1456775f);
pc.setDouble("double", Math.PI);
+ pc.setDouble("negative_double", -1.0);
+ pc.setDouble("zero", 0.0);
pc.setDouble("too_long_double", TOO_LONG_DOUBLE);
pc.setString("string", "42");
pc.setString("non_convertible_string", "bcdefg&&");
@@ -134,7 +136,25 @@ public class ConfigurationTest extends TestLogger {
assertEquals(false, pc.getBoolean("double", true));
assertTrue(pc.getString("double", "0").startsWith("3.1415926535"));
assertArrayEquals(EMPTY_BYTES, pc.getBytes("double", EMPTY_BYTES));
-
+
+ // as negative double
+ assertEquals(0, pc.getInteger("negative_double", 0));
+ assertEquals(0L, pc.getLong("negative_double", 0));
+ assertEquals(-1f, pc.getFloat("negative_double", 0), 0.000001);
+ assertEquals(-1, pc.getDouble("negative_double", 0), 0.0);
+ assertEquals(false, pc.getBoolean("negative_double", true));
+ assertTrue(pc.getString("negative_double", "0").startsWith("-1"));
+ assertArrayEquals(EMPTY_BYTES, pc.getBytes("negative_double", EMPTY_BYTES));
+
+ // as zero
+ assertEquals(-1, pc.getInteger("zero", -1));
+ assertEquals(-1L, pc.getLong("zero", -1));
+ assertEquals(0f, pc.getFloat("zero", -1), 0.000001);
+ assertEquals(0.0, pc.getDouble("zero", -1), 0.0);
+ assertEquals(false, pc.getBoolean("zero", true));
+ assertTrue(pc.getString("zero", "-1").startsWith("0"));
+ assertArrayEquals(EMPTY_BYTES, pc.getBytes("zero", EMPTY_BYTES));
+
// as too long double
assertEquals(0, pc.getInteger("too_long_double", 0));
assertEquals(0L, pc.getLong("too_long_double", 0));
http://git-wip-us.apache.org/repos/asf/flink/blob/9bfc927e/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregator.java
----------------------------------------------------------------------
diff --git a/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregator.java b/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregator.java
index d89496b..cdf40c5 100644
--- a/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregator.java
+++ b/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregator.java
@@ -32,7 +32,7 @@ public class DoubleSummaryAggregator extends NumericSummaryAggregator<Double> {
public static class MinDoubleAggregator implements Aggregator<Double,Double> {
- private double min = Double.MAX_VALUE;
+ private double min = Double.POSITIVE_INFINITY;
@Override
public void aggregate(Double value) {
@@ -52,7 +52,7 @@ public class DoubleSummaryAggregator extends NumericSummaryAggregator<Double> {
public static class MaxDoubleAggregator implements Aggregator<Double,Double> {
- private double max = Double.MIN_VALUE;
+ private double max = Double.NEGATIVE_INFINITY;
@Override
public void aggregate(Double value) {
http://git-wip-us.apache.org/repos/asf/flink/blob/9bfc927e/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregator.java
----------------------------------------------------------------------
diff --git a/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregator.java b/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregator.java
index bc78841..5e06670 100644
--- a/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregator.java
+++ b/flink-java/src/main/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregator.java
@@ -34,7 +34,7 @@ public class FloatSummaryAggregator extends NumericSummaryAggregator<Float> {
public static class MinFloatAggregator implements Aggregator<Float,Float> {
- private float min = Float.MAX_VALUE;
+ private float min = Float.POSITIVE_INFINITY;
@Override
public void aggregate(Float value) {
@@ -54,7 +54,7 @@ public class FloatSummaryAggregator extends NumericSummaryAggregator<Float> {
public static class MaxFloatAggregator implements Aggregator<Float,Float> {
- private float max = Float.MIN_VALUE;
+ private float max = Float.NEGATIVE_INFINITY;
@Override
public void aggregate(Float value) {
http://git-wip-us.apache.org/repos/asf/flink/blob/9bfc927e/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregatorTest.java
----------------------------------------------------------------------
diff --git a/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregatorTest.java b/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregatorTest.java
index 08fbe78..0ef3969 100644
--- a/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregatorTest.java
+++ b/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/DoubleSummaryAggregatorTest.java
@@ -129,6 +129,7 @@ public class DoubleSummaryAggregatorTest {
Assert.assertEquals(1001.0, summarize(-1000.0, 0.0, 1.0, 50.0, 999.0, 1001.0).getMax().doubleValue(), 0.0);
Assert.assertEquals(11.0, summarize(1.0, 8.0, 7.0, 6.0, 9.0, 10.0, 2.0, 3.0, 5.0, 0.0, 11.0, -2.0, 3.0).getMax().doubleValue(), 0.0);
Assert.assertEquals(11.0, summarize(1.0, 8.0, 7.0, 6.0, 9.0, null, 10.0, 2.0, 3.0, 5.0, null, 0.0, 11.0, -2.0, 3.0).getMax().doubleValue(), 0.0);
+ Assert.assertEquals(-1.0, summarize(-1.0, -8.0, -7.0, null, -11.0).getMax().doubleValue(), 0.0);
Assert.assertNull(summarize().getMax());
}
http://git-wip-us.apache.org/repos/asf/flink/blob/9bfc927e/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregatorTest.java
----------------------------------------------------------------------
diff --git a/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregatorTest.java b/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregatorTest.java
index c761fc2..3e0c899 100644
--- a/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregatorTest.java
+++ b/flink-java/src/test/java/org/apache/flink/api/java/summarize/aggregation/FloatSummaryAggregatorTest.java
@@ -130,6 +130,7 @@ public class FloatSummaryAggregatorTest {
Assert.assertEquals(1001.0f, summarize(-1000.0f, 0.0f, 1.0f, 50.0f, 999.0f, 1001.0f).getMax().floatValue(), 0.0f);
Assert.assertEquals(11.0f, summarize(1.0f, 8.0f, 7.0f, 6.0f, 9.0f, 10.0f, 2.0f, 3.0f, 5.0f, 0.0f, 11.0f, -2.0f, 3.0f).getMax().floatValue(), 0.0f);
Assert.assertEquals(11.0f, summarize(1.0f, 8.0f, 7.0f, 6.0f, 9.0f, null, 10.0f, 2.0f, 3.0f, 5.0f, null, 0.0f, 11.0f, -2.0f, 3.0f).getMax().floatValue(), 0.0f);
+ Assert.assertEquals(-2.0f, summarize(-8.0f, -7.0f, -6.0f, -9.0f, null, -10.0f, null, -2.0f).getMax().floatValue(), 0.0f);
Assert.assertNull(summarize().getMax());
}