Keep It Simple, Stupid PerlMonks

### Re: Is this odd behavior a floating point problem?

by Khen1950fx (Canon)
 on Mar 23, 2012 at 19:18 UTC ( #961296=note: print w/replies, xml ) Need Help??

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.

Create A New User
Node Status?
node history
Node Type: note [id://961296]
help
Chatterbox?
 Discipulus what?! penitentiagite monaci!

How do I use this? | Other CB clients
Other Users?