Data-IEEE754-Tools
view release on metacpan or search on metacpan
The inverse of C<binstr754_from_double()>: it takes a string representing the 64 bits
of the IEEE754 double value, and converts it back to a perl floating-point value.
print binstr754_to_double('0100000000101001110000000000000000000000000000000000000000000000');
12.875
=cut
# Perl 5.10 introduced the ">" and "<" modifiers for pack which can be used to
# force a specific endianness.
if( $] lt '5.010' ) {
my $str = join('', unpack("H*", pack 'L' => 0x12345678));
if('78563412' eq $str) { # little endian, so reverse byteorder
*hexstr754_from_double = sub { return uc unpack('H*' => reverse pack 'd' => shift); };
*binstr754_from_double = sub { return uc unpack('B*' => reverse pack 'd' => shift); };
*hexstr754_to_double = sub { return unpack('d' => reverse pack 'H*' => shift); };
*binstr754_to_double = sub { return unpack('d' => reverse pack 'B*' => shift); };
*arr2x32b_from_double = sub { return unpack('N2' => reverse pack 'd' => shift); };
} elsif('12345678' eq $str) { # big endian, so keep default byteorder
( run in 0.903 second using v1.01-cache-2.11-cpan-cc502c75498 )