sub IEEE80toIEEE64 { my( $discard, $mantissa, $hidden, $exponent, $sign ) = unpack 'a11 a52 a1 a15 a1', unpack 'b80', $_[ 0 ]; $exponent = unpack( 'v', pack 'b15', $exponent ) - 16383 + 1023; $exponent = 32767, $mantissa = '0' x 52 if $exponent < 0 or $exponent > 2047; $exponent = unpack 'b11', pack 'v', $exponent; return unpack 'd', pack 'b64', $mantissa . $exponent . $sign; } #### realtest x.bin C:\dmd\test>\test\80bit.pl -1.0935598595647423806e-4950 -1.#INF 1.0935598595647423806e-4950 1.#INF -1.2345678901234567887e-4932 -1.#INF 1.2345678901234567887e-4932 1.#INF -1.2345678901234567887e-309 -1.#INF 1.2345678901234567887e-309 1.#INF -1.2345678901234567912e-206 -1.2345678901234567e-206 1.2345678901234567912e-206 1.2345678901234567e-206 -1.2345678901234567937e-103 -1.2345678901234568e-103 1.2345678901234567937e-103 1.2345678901234568e-103 -1.234567890123456796 -1.2345678901234567 1.234567890123456796 1.2345678901234567 -1.2345678901234567983e+103 -1.2345678901234567e+103 1.2345678901234567983e+103 1.2345678901234567e+103 -1.2345678901234568006e+206 -1.2345678901234568e+206 1.2345678901234568006e+206 1.2345678901234568e+206 -1.2345678901234568031e+309 -1.#INF 1.2345678901234568031e+309 1.#INF -1.2345678901234567889e+4930 -1.#INF 1.2345678901234567889e+4930 1.#INF -1.2345678901234567892e+4931 -1.#INF 1.2345678901234567892e+4931 1.#INF 0.005000 0.0049999999999999992 -0.005000 -0.0049999999999999992 0.050000 0.049999999999999996 -0.050000 -0.049999999999999996 0.500000 0.5 -0.500000 -0.5 5.000000 5 -5.000000 -5 50.000000 50 -50.000000 -50