http://www.perlmonks.org?node_id=961296


in reply to Is this odd behavior a floating point problem?

As I see it, you're performing addition, division, and averaging. You can dispense with the addition, division, and since you have an array, just do an average of the elements.
#!/usr/bin/perl -l use strict; use warnings; use Array::Average; print average( 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, );
Returns: 0.001

Replies are listed 'Best First'.
Re^2: Is this odd behavior a floating point problem?
by Eliya (Vicar) on Mar 23, 2012 at 20:48 UTC
    You can dispense with the addition, division,...

    And how do you think the module arrives at its result?  What it does is exactly addition and division — which of course suffers from the same floating point issues.  Here's the relevant code snippet:

    if (@data) { my $sum=0; $sum+=$_ foreach @data; return $sum/scalar(@data); } else { return undef; }

    Anyhow, as has already been pointed out, the OP's problem has likely nothing whatsoever to do with those general floating point issues, but is presumably simply the result of having computed the sum incorrectly.