P is for Practical PerlMonks

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

by Eliya (Vicar)
 on Mar 23, 2012 at 17:14 UTC ( #961266=note: print w/replies, xml ) Need Help??

For reasons described in excruciating detail in the document already cited, there will be errors, but according to a quick test on my system, they are nowhere near as large as you claim:

```\$ perl -e '\$x=0.001; \$sum += \$x for 1..40; printf "%.20f", \$sum/40'
0.00100000000000000067

Looks more like a "one off" error to me (i.e. summing over one more than you divide by):

```\$ perl -e '\$x=0.001; \$sum += \$x for 0..40; printf "%.20f", \$sum/40'
0.00102500000000000074

Replies are listed 'Best First'.
Re^2: Is this odd behavior a floating point problem?
by Anonymous Monk on Mar 24, 2012 at 00:47 UTC

:D Looks like two separate off-by-one error (OBOE) errors to me :)

In short

```perl -MData::Dump -e " @f = map { 0.001 } 1 .. 40; dd\@f; \$o = 0; for(
+@f){ dd \$o+=\$_; } dd int @f; dd \$o/int(@f); "

perl -MData::Dump -e "  \$o = 0; for(1 .. 40){ dd \$o+= 0.001; } dd \$o/4
+0; "

It didn't dawn on me to check wickedjesters (or your) math until ww raised the quesiton

Not sure what you're talking about.

n times adding x to zero is mathematically (but not necessarily numerically) the same as n * x.

```\$ perl -le '\$sum += 1 for 1..40; print \$sum'
40

So where is the problem?  I think you overlooked that \$sum is initially undef/zero.

Create A New User
Node Status?
node history
Node Type: note [id://961266]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (11)
As of 2017-06-26 19:43 GMT
Sections?
Information?
Find Nodes?
Leftovers?
Voting Booth?
How many monitors do you use while coding?

Results (589 votes). Check out past polls.