in reply to Fun with floating points

You should really be comparing floating point numbers using a threshold, rather than an absolute comparison. The problem in your code (correct me if I'm wrong) is that the representation changed when converting from a string back to a float. The following demonstrates a better way to do this.
my $x = 0.05; my $y = sqrt($x+$x+$x); my $g = "$y"; my $h = sprintf "%.20f", $y; printf "\$y = %.20f\n\$g = %.20f\n", $y, $g; printf "\$h = %.20f\n", $h; print "Is \$y equal to \$g? ", floatEqual($y, $g) ? "Yes\n" : "No\n"; print "Is \$y equal to \$h? ", $y == $h ? "Yes\n" : "No\n"; sub floatEqual { return (abs($_[0] - $_[1]) <= 10**15); }

I also added the $h variable, which works just fine in a direct comparison. I'm sure someone else who knows more about internal representations and conversions can shed more intelligent light on this.