for my $a (-2..10, 0.2, -0.2, 1 + 0.25e-15) { $_ = unpack("b*", pack("d", $a)); # double to bit-pattern s/(.{8})/$1 /g; tr[0][.]; # grouping&fmt. $_ = reverse $_; # formatting s/^(..)(.{12})(.*)/Sgn:$1 Exp: $2 Mant:(1,)$3/; print "$a\t -- $_\n"; } #### my $a = 1+0.25e-15;# hidden bit and last bit of mantissa: 1 print "Test : is int.? correct?\n"; print "a != int(a) : no yes\n" if $a != int($a); $d = abs($a - int($a)); print "abs(a-int(a) < 1e-15: yes no!\n" if $d<1e-15; print "abs(a-int(a) < 1e-40: yes ???\n" if $d<1e-40; print "abs(a-int(a) > 0 : no yes\n" if $d>0; printf("epsilon < %g required (here!)\n", $d); __END__ Test : is int.? correct? a != int(a) : no yes abs(a-int(a) < 1e-15: yes no! abs(a-int(a) > 0 : no yes epsilon < 2.22045e-16 required (here!)