$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