This is due to not all floating point numbers being exactly 
representable in IEEE floating point math.  This is a problem across 
machines and languages.  More info at:

http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

This is also why it can be dangerous to do floating point increments in 
loops.  Generally at the language level, it will depend on where the 
rounding kicks in, which you can adjust for printing purposes, but the 
math is only as good as the underlying hardware handles (which is why 
integer-based math for decimal values in some situations is required).

Jeff

On 04/02/2011 9:25 AM, Francisco Zarabozo wrote:
> Hello All,
>
> Right now I'm using Active Perl 5.10.1. I've been working with Perl for more
> than 10 years. Yet, today is the first time I notice this wierd thing. Maybe
> I ignore something about how Perl's math works, yet it's driving me crazy. I
> can't believe this is the first time I notice this and makes me wonder how
> many applications I've written in the past that are actually doing this
> without me knowing about it. I'm talking about this:
>
>
> print 1.1 - 1; # Gives 0.1
> print "\n";
>
> print 2.1 - 2; # Gives 0.1
> print "\n";
>
> print 3.1 - 3; # Gives 0.1
> print "\n";
>
> print 4.1 - 4; # Gives 0.0999999999999996 ???
> print "\n";
>
> print 6.2 - 6; # Gives 0.2
> print "\n";
>
> print 7.2 - 7; # Gives 0.2
> print "\n";
>
> print 8.2 - 8; # Gives 0.199999999999999 ???
> print "\n";
>
> Why is this? Thanks in advance.
>
>
> Best regards,
>
> Francisco
_______________________________________________
ActivePerl mailing list
ActivePerl@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to