On 10 November 2011 17:15, Luc Maisonobe <luc.maison...@free.fr> wrote: > Le 10/11/2011 15:43, s...@apache.org a écrit : >> Author: sebb >> Date: Thu Nov 10 14:43:44 2011 >> New Revision: 1200350 >> >> URL: http://svn.apache.org/viewvc?rev=1200350&view=rev >> Log: >> Unnecessary casts - angbd is double, so ensures the rest of the calculation >> uses double >> >> Modified: >> >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java >> >> Modified: >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java >> URL: >> http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java?rev=1200350&r1=1200349&r2=1200350&view=diff >> ============================================================================== >> --- >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java >> (original) >> +++ >> commons/proper/math/trunk/src/main/java/org/apache/commons/math/optimization/direct/BOBYQAOptimizer.java >> Thu Nov 10 14:43:44 2011 >> @@ -2149,7 +2149,7 @@ public class BOBYQAOptimizer >> redsav = ZERO; >> iu = (int) (angbd * 17. + 3.1); >> for (int i = 0; i < iu; i++) { >> - angt = angbd * (double) i / (double) iu; >> + angt = angbd * i / iu; > > I'm not sure about this. It depends on how the compiler performs > associativity. > > This multiplication can be compiled either as > (angbd * i) / iu > or as > angbd * (i / iu) > > In the later case, the integer division is wrong.
http://introcs.cs.princeton.edu/java/11precedence/ says * and / have equal precedence, so * is done first. > Luv > > >> sth = (angt + angt) / (ONE + angt * angt); >> temp = shs + angt * (angt * dhd - dhs - dhs); >> rednew = sth * (angt * dredg - sredg - HALF * sth * temp); >> @@ -2171,7 +2171,7 @@ public class BOBYQAOptimizer >> } >> if (isav < iu) { >> temp = (rdnext - rdprev) / (redmax + redmax - rdprev - >> rdnext); >> - angt = angbd * ((double) isav + HALF * temp) / (double) iu; >> + angt = angbd * (isav + HALF * temp) / iu; >> } >> cth = (ONE - angt * angt) / (ONE + angt * angt); >> sth = (angt + angt) / (ONE + angt * angt); >> >> > > > --------------------------------------------------------------------- > 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