You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2011/10/18 22:30:43 UTC
svn commit: r1185841 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/exception/util/
main/java/org/apache/commons/math/util/ main/resources/META-INF/localization/
test/java/org/apache/commons/math/util/
Author: erans
Date: Tue Oct 18 20:30:42 2011
New Revision: 1185841
URL: http://svn.apache.org/viewvc?rev=1185841&view=rev
Log:
MATH-690
New "copySign" method.
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java
commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties
commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java?rev=1185841&r1=1185840&r2=1185841&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/exception/util/LocalizedFormats.java Tue Oct 18 20:30:42 2011
@@ -272,6 +272,7 @@ public enum LocalizedFormats implements
OUT_OF_RANGE("out of range"), /* keep */
OUT_OF_RANGE_SIMPLE("{0} out of [{1}, {2}] range"), /* keep */
OUTLINE_BOUNDARY_LOOP_OPEN("an outline boundary loop is open"),
+ OVERFLOW("overflow"), /* keep */
OVERFLOW_IN_FRACTION("overflow in fraction {0}/{1}, cannot negate"),
OVERFLOW_IN_ADDITION("overflow in addition: {0} + {1}"),
OVERFLOW_IN_SUBTRACTION("overflow in subtraction: {0} - {1}"),
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java?rev=1185841&r1=1185840&r2=1185841&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/MathUtils.java Tue Oct 18 20:30:42 2011
@@ -419,6 +419,28 @@ public final class MathUtils {
}
/**
+ * Returns the first argument with the sign of the second argument.
+ *
+ * @param magnitude Magnitude of the returned value.
+ * @param sign Sign of the returned value.
+ * @return a value with magnitude equal to {@code magnitude} and with the
+ * same sign as the {@code sign} argument.
+ * @throws MathArithmeticException if {@code magnitude == Byte.MIN_VALUE}
+ * and {@code sign >= 0}.
+ */
+ public static byte copySign(byte magnitude, byte sign) {
+ if ((magnitude >= 0 && sign >= 0) ||
+ (magnitude < 0 && sign < 0)) { // Sign is OK.
+ return magnitude;
+ } else if (sign >= 0 &&
+ magnitude == Byte.MIN_VALUE) {
+ throw new MathArithmeticException(LocalizedFormats.OVERFLOW);
+ } else {
+ return (byte) -magnitude; // Flip sign.
+ }
+ }
+
+ /**
* Returns the <a href="http://mathworld.wolfram.com/Sign.html"> sign</a>
* for int value {@code x}.
* <p>
Modified: commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties?rev=1185841&r1=1185840&r2=1185841&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties (original)
+++ commons/proper/math/trunk/src/main/resources/META-INF/localization/LocalizedFormats_fr.properties Tue Oct 18 20:30:42 2011
@@ -238,6 +238,7 @@ OUT_OF_ORDER_ABSCISSA_ARRAY = les abscis
OUT_OF_RANGE_ROOT_OF_UNITY_INDEX = l''indice de racine de l''unit\u00e9 {0} est hors du domaine autoris\u00e9 [{1};{2}]
OUT_OF_RANGE_SIMPLE = {0} hors du domaine [{1}, {2}]
OUT_OF_RANGE = hors domaine
+OVERFLOW = d\u00e9passement de capacit\u00e9
OVERFLOW_IN_FRACTION = d\u00e9passement de capacit\u00e9 pour la fraction {0}/{1}, son signe ne peut \u00eatre chang\u00e9
OVERFLOW_IN_ADDITION = d\u00e9passement de capacit\u00e9 pour l''addition : {0} + {1}
OVERFLOW_IN_SUBTRACTION = d\u00e9passement de capacit\u00e9 pour la soustraction : {0} - {1}
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java?rev=1185841&r1=1185840&r2=1185841&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/util/MathUtilsTest.java Tue Oct 18 20:30:42 2011
@@ -612,4 +612,40 @@ public final class MathUtilsTest {
// Expected.
}
}
+
+ @Test
+ public void testCopySignByte() {
+ byte a = MathUtils.copySign(Byte.MIN_VALUE, (byte) -1);
+ Assert.assertEquals(Byte.MIN_VALUE, a);
+
+ final byte minValuePlusOne = Byte.MIN_VALUE + (byte) 1;
+ a = MathUtils.copySign(minValuePlusOne, (byte) 1);
+ Assert.assertEquals(Byte.MAX_VALUE, a);
+
+ a = MathUtils.copySign(Byte.MAX_VALUE, (byte) -1);
+ Assert.assertEquals(minValuePlusOne, a);
+
+ final byte one = 1;
+ byte val = -2;
+ a = MathUtils.copySign(val, one);
+ Assert.assertEquals(-val, a);
+
+ final byte minusOne = -one;
+ val = 2;
+ a = MathUtils.copySign(val, minusOne);
+ Assert.assertEquals(-val, a);
+
+ val = 0;
+ a = MathUtils.copySign(val, minusOne);
+ Assert.assertEquals(val, a);
+
+ val = 0;
+ a = MathUtils.copySign(val, one);
+ Assert.assertEquals(val, a);
+ }
+
+ @Test(expected=MathArithmeticException.class)
+ public void testCopySignByte2() {
+ MathUtils.copySign(Byte.MIN_VALUE, (byte) 1);
+ }
}