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());
 	}