Al Chou wrote:
* @param values Is a double[] containing the values
* @return the result, Double.NaN if no values for an empty array * or 0.0 for a single value set. @@ -168,10 +175,12 @@
} else if (values.length > 1) {
double mean = mean(values);
double accum = 0.0;
+ double accum2 = 0.0;
for (int i = 0; i < values.length; i++) {
accum += Math.pow((values[i] - mean), 2.0);
+ accum2 += (values[i] - mean);
}
- variance = accum / (double)(values.length - 1);
+ variance = (accum - (Math.pow(accum2,2)/(double)values.length)) /
(double)(values.length - 1);


Maybe I'm displaying my old Fortran programmer's bias or premature optimization
without first profiling, but is there a good reason to call Math.pow for the
square in this line rather than do a multiplication?  I can kind of see why you
wouldn't want to introduce a new variable in the "accum +=" line above this
one, but I don't see the need to do a function call for a square on this line.


Shamefully, I've never programmed Fortran, so you have a unique perspective over me. We've gone back and forth on this subject before. In this case its probably fine to do either x*x or Math.pow(x,2).


One also has to take into consideration that the Math/StrictMath.pow method is actually a native method and is thus also actually implemented in the native binary portion of the JVM. This is quite efficient and optimized from what I understand, but I'm no expert on this subject and this is just speculation. I tend to use the Math static library more from a moral standpoint, if we're building the same sort of static library, then its respectable for us to use the java Math library internally for consistency. But, thats just an opinion.

-Mark


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to