in reply to When is a 2 not a 2?

One way out of the problem is to use rational numbers.

#! /usr/local/bin/perl use strict; use warnings; use Math::BigRat; my $x = Math::BigRat->new; my $delta = Math::BigRat->new('1/10'); for ($x=1; $x < 2; $x += $delta) { print "$x\n"; } print "Stop: x=$x\n"; print "No, x is not 2.\n" if $x != 2; __PRODUCES__ 1 11/10 6/5 13/10 7/5 3/2 8/5 17/10 9/5 19/10 Stop: x=2

Oddly, I had to change the less-than-or-equal comparator to less-than. I'm not sure why this is different to your code, but then again I never use C-style for loops, so there may be some subtlety I'm overlooking. I would have written it as follows:

my $x = Math::BigRat->new(1); while ($x < 2) { $x += $delta; print "$x\n"; }

• another intruder with the mooring in the heart of the Perl