in reply to Re^2: bug in Perl compilation?
in thread bug in Perl compilation?

That's so weird!! I thought this was all standardized.

Anybody know any way to make this portable across all the platforms?

When dealing with reals, you usually need to compare within a tolerance.
a == b
is equivalent to
a - b == 0
and to
|a - b| <= 0
With a tolerance, it becomes
|a - b| <= tol

Tolerance can be absolute
(e.g. tol = 0.0001)
or relative
(e.g. tol = a * 0.05)

Replies are listed 'Best First'.
Re: Comparing Reals with a Tolerance
by ruoso (Curate) on Dec 22, 2005 at 15:52 UTC

    Hmmm... Reading your post, I wondered if it wouldn't be good to have a module that overloads this operators applying such tolerance... I took a look on CPAN and couldn't found such module.

    Update: Math::BigFloat seems to do someting like that...

    like...

    use FloatingPoint::Helper -tolerance => 0.0001; # Ok, not a good module name... my $a = FloatingPoint::Helper->float(12e-4); my $b = FloatingPoint::Helepr->float(1.2e-3); if ($a > $b) { print "really greater...\n"; } elsif ($a < $b) { print "really lesser...\n"; } else { print "almost equal...\n"; }

    It would be possibly interesting to have different tolerances for different numbers, but I don't know what to do if two numbers with different tolerances are compared, or worse, if you sum them... Maybe using the tolerance of the leftest operand... I Don't know...

    daniel
      but I don't know what to do if two numbers with different tolerances are compared

      Use the smaller of the two tolerances.