$d = unpack 'd', pack 'Q', 0x7ff0000000000001;; print $d;; 1.#SNAN printf "%f\n", $d;; 1.#SNAN0 #### #! perl -slw use strict; use Config; use Inline C => Config => BUILD_NOISY => 1; use Inline C => <<'END_C', NAME => 'snanic', CLEAN_AFTER_BUILD =>0; #ifdef _WIN32 typedef __int64 BIGGUN; #else /* "long" is 64-bit on my linux box */ typedef long BIGGUN; #endif typedef union { double d; BIGGUN i; } BITS64; SV*get_snan() { BITS64 x; x.i = 0x7ff0000000000001; return newSVnv( x.d ); } END_C sub doubleToHex { scalar reverse unpack 'h16', pack 'd', $_[0] } my $snan = get_snan(); printf "%f\n", $snan; print doubleToHex( $snan ); #### C:\test>snan-ic.pl 1.#SNAN0 7ff0000000000001