On 23 January 2011 22:18, Phil Steitz <phil.ste...@gmail.com> wrote: > On Sun, Jan 23, 2011 at 6:57 AM, sebb <seb...@gmail.com> wrote: >> On 23 January 2011 09:58, Luc Maisonobe <luc.maison...@free.fr> wrote: >>> Le 23/01/2011 01:58, s...@apache.org a écrit : >>>> Author: sebb >>>> Date: Sun Jan 23 00:58:07 2011 >>>> New Revision: 1062304 >>>> >>>> URL: http://svn.apache.org/viewvc?rev=1062304&view=rev >>>> Log: >>>> MATH-496 Create FastMath copySign methods >>> >>> I was also creating these methods. >>> I have created all the missing ones and implemented hypot directly, so >>> don't bother doing it too. >> >> OK. >> >> I've mainly been working in Math trunk, and porting back to 2.2, so >> I'll add your new methods back to trunk. >> I'll also merge my fixes to nextAfter. >> >> FastMath and FastMathTest should be the same in both. >> >> Apart from the @since marker in FastMath - perhaps we can use @since >> 2.2, 3.0 for that? > > Should be @since 2.2 > > Lets try to get all the fixes into 2.2.
Yes, indeed. I think we are quite close now. == What I meant was - the class is new for 2.2 and also new for 3.0. The class and its test class(es) are currently the same for both versions of Math. We obviously need to put @since 2.2 in the class for the 2.2 release. Is that sufficient also for the 3.0 release? Or do we need to put @since 3.0 in it for that? Strictly speaking it is new to 3.0 too. So maybe we can put: @since 2.0 @since 3.0 or @since 2.0,3.0 in the (one) copy of the file. This would be easier than having to fix the @since marker in one of the files. > Phil > >> Or if that is confusing, we just need to fix one before release. >> >>> Luc >>> >>>> >>>> Modified: >>>> >>>> commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java >>>> >>>> Modified: >>>> commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java >>>> URL: >>>> http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java?rev=1062304&r1=1062303&r2=1062304&view=diff >>>> ============================================================================== >>>> --- >>>> commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java >>>> (original) >>>> +++ >>>> commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java >>>> Sun Jan 23 00:58:07 2011 >>>> @@ -247,18 +247,6 @@ public class FastMath { >>>> // Generic helper methods >>>> >>>> /** >>>> - * Get the sign information (works even for 0). >>>> - * >>>> - * @param d the value to check >>>> - * >>>> - * @return +1.0 or -1.0, never 0.0 >>>> - */ >>>> - private static double getSign(double d){ // TODO perhaps move to >>>> MathUtils? >>>> - long l = Double.doubleToLongBits(d); >>>> - return l < 0 ? -1.0 : 1.0; >>>> - } >>>> - >>>> - /** >>>> * Get the high order bits from the mantissa. >>>> * Equivalent to adding and subtracting HEX_40000 but also works for >>>> very large numbers >>>> * >>>> @@ -2798,7 +2786,7 @@ public class FastMath { >>>> int idx; >>>> >>>> if (xa == 0.0) { // Matches +/- 0.0; return correct sign >>>> - return leftPlane ? getSign(xa) * Math.PI : xa; >>>> + return leftPlane ? copySign(Math.PI, xa) : xa; >>>> } >>>> >>>> if (xa < 0) { >>>> @@ -2957,7 +2945,7 @@ public class FastMath { >>>> if (x > 0) { >>>> return y; // return +/- 0.0 >>>> } else { >>>> - return getSign(y) * Math.PI; >>>> + return copySign(Math.PI, y); >>>> } >>>> } >>>> >>>> @@ -3737,4 +3725,37 @@ public class FastMath { >>>> return StrictMath.IEEEremainder(dividend, divisor); // TODO >>>> provide our own implementation >>>> } >>>> >>>> + /** >>>> + * Returns the first argument with the sign of the second argument. >>>> + * A NaN {@code sign} argument is treated as positive. >>>> + * >>>> + * @param magnitude the value to return >>>> + * @param sign the sign for the returned value >>>> + * @return the magnitude with the same sign as the {@code sign} >>>> argument >>>> + */ >>>> + public static double copySign(double magnitude, double sign){ >>>> + long m = Double.doubleToLongBits(magnitude); >>>> + long s = Double.doubleToLongBits(sign); >>>> + if ((m >= 0 && s >= 0) || (m < 0 && s < 0)) { // Sign is >>>> currently OK >>>> + return magnitude; >>>> + } >>>> + return -magnitude; // flip sign >>>> + } >>>> + >>>> + /** >>>> + * Returns the first argument with the sign of the second argument. >>>> + * A NaN {@code sign} argument is treated as positive. >>>> + * >>>> + * @param magnitude the value to return >>>> + * @param sign the sign for the returned value >>>> + * @return the magnitude with the same sign as the {@code sign} >>>> argument >>>> + */ >>>> + public static float copySign(float magnitude, float sign){ >>>> + int m = Float.floatToIntBits(magnitude); >>>> + int s = Float.floatToIntBits(sign); >>>> + if ((m >= 0 && s >= 0) || (m < 0 && s < 0)) { // Sign is >>>> currently OK >>>> + return magnitude; >>>> + } >>>> + return -magnitude; // flip sign >>>> + } >>>> } >>>> >>>> >>>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org