sub fmt{ my $bin = unpack 'Q', pack 'd', $_[0]; my $sign = ( $bin & 0x8000000000000000 ); my $exp = ( $bin & 0x7FF0000000000000 ) >> 52; $exp -= 1023; my $mant = ( $bin & 0x000FFFFFFFFFFFFF ); sprintf "%s0x1.%xp%d", ( $sign ? '-' : '' ), $mant, $exp; }