in reply to When 1e-298L != 1e-298L

G'day Rob,

I don't have an explanation. For what it's worth, here's the output from running your code under v5.18.1 (darwin):

Here's my full perl -V:

$ perl -V Summary of my perl5 (revision 5 version 18 subversion 1) configuration +: Platform: osname=darwin, osvers=11.4.2, archname=darwin-thread-multi-2level uname='darwin ganymede 11.4.2 darwin kernel version 11.4.2: thu au +g 23 16:25:48 pdt 2012; root:xnu-1699.32.7~1release_x86_64 x86_64 ' config_args='-de -Dprefix=/Users/ken/perl5/perlbrew/perls/perl-5.1 +8.1t -Dusethreads' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=und +ef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-fno-common -DPERL_DARWIN -fno-strict-aliasing +-pipe -fstack-protector -I/usr/local/include -I/opt/local/include', optimize='-O3', cppflags='-fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fs +tack-protector -I/usr/local/include -I/opt/local/include' ccversion='', gccversion='4.2.1 (Based on Apple Inc. build 5658) ( +LLVM build 2336.1.00)', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +6 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags =' -fstack-prot +ector -L/usr/local/lib -L/opt/local/lib' libpth=/usr/local/lib /opt/local/lib /usr/lib libs=-lgdbm -ldbm -ldl -lm -lutil -lc perllibs=-ldl -lm -lutil -lc libc=, so=dylib, useshrplib=false, libperl=libperl.a gnulibc_version='' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=bundle, d_dlsymun=undef, ccdlflags=' ' cccdlflags=' ', lddlflags=' -bundle -undefined dynamic_lookup -L/u +sr/local/lib -L/opt/local/lib -fstack-protector' Characteristics of this binary (from libperl): Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS PERL_DONT_CREATE_GVSV PERL_HASH_FUNC_ONE_AT_A_TIME_HARD PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP PERL_PRESERVE_IVUV PERL_SAWAMPERSAND USE_64_BI +T_ALL USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API Built under darwin Compiled at Aug 28 2013 15:25:59 %ENV: PERL5LIB="/Users/ken/local/lib/perl" PERLBREW_BASHRC_VERSION="0.30" PERLBREW_HOME="/Users/ken/.perlbrew" PERLBREW_PATH="/Users/ken/perl5/perlbrew/bin:/Users/ken/perl5/perl +brew/perls/perl-5.18.1t/bin" PERLBREW_PERL="perl-5.18.1t" PERLBREW_ROOT="/Users/ken/perl5/perlbrew" PERLBREW_VERSION="0.30" @INC: /Users/ken/local/lib/perl /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1/ +darwin-thread-multi-2level /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/site_perl/5.18.1 /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/5.18.1/darwin-thr +ead-multi-2level /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/5.18.1 .

-- Ken

Replies are listed 'Best First'.
Re^2: When 1e-298L != 1e-298L
by syphilis (Archbishop) on Oct 24, 2013 at 23:23 UTC
    Interesting that there's also a discrepancy with 1e-298 on perl's (such as yours) whose nvtype is 'double'.
    When I check on my 'double' build of perl 5.18.0, I also find a discrepancy.
    The script I originally posted is not properly portable to 'double' builds of perl. This rendition of the script should work as intended for both nvtypes:
    #!perl -l use warnings; use strict; use Config; use Inline C => Config => USING => 'ParseRegExp', BUILD_NOISY => 1; use Inline C => <<'EOC'; SV * get_problem_val(long nvsize) { if(nvsize == 8) return newSVnv(1e-298); return newSVnv(1e-298L); } EOC my $s = $Config{nvsize}; print "\n\$Config{nvtype}: $Config{nvtype}"; print "Different values" if 1e-298 != get_problem_val($s); if($Config{nvsize} != 8) { print scalar reverse unpack "b64", pack "D", 1e-298; print scalar reverse unpack "b64", pack "D", get_problem_val($s); } else { print scalar reverse unpack "b53", pack "F", 1e-298; print scalar reverse unpack "b53", pack "F", get_problem_val($s); }
    Thanks, Ken.

    Cheers,
    Rob
      "This rendition of the script should work as intended for both nvtypes: ..."

      Here's the output from that code:

      validate Stage Starting Build Preprocess Stage get_maps Stage Finished Build Preprocess Stage Starting Build Parse Stage Finished Build Parse Stage Starting Build Glue 1 Stage Finished Build Glue 1 Stage Starting Build Glue 2 Stage Finished Build Glue 2 Stage Starting Build Glue 3 Stage Finished Build Glue 3 Stage Starting Build Compile Stage Starting "perl Makefile.PL" Stage Writing Makefile for pm_example_pl_cb2d Writing MYMETA.yml and MYMETA.json Finished "perl Makefile.PL" Stage Starting "make" Stage /Users/ken/perl5/perlbrew/perls/perl-5.18.1t/bin/perl /Users/ken/perl5 +/perlbrew/perls/perl-5.18.1t/lib/5.18.1/ExtUtils/xsubpp -typemap "/U +sers/ken/perl5/perlbrew/perls/perl-5.18.1t/lib/5.18.1/ExtUtils/typema +p" pm_example_pl_cb2d.xs > pm_example_pl_cb2d.xsc && mv pm_example_ +pl_cb2d.xsc pm_example_pl_cb2d.c cc -c -I"/Users/ken/tmp" -fno-common -DPERL_DARWIN -fno-strict-aliasi +ng -pipe -fstack-protector -I/usr/local/include -I/opt/local/include +-O3 -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\" "-I/Users/ken/perl5/p +erlbrew/perls/perl-5.18.1t/lib/5.18.1/darwin-thread-multi-2level/CORE +" pm_example_pl_cb2d.c Running Mkbootstrap for pm_example_pl_cb2d () chmod 644 pm_example_pl_cb2d.bs rm -f blib/arch/auto/pm_example_pl_cb2d/pm_example_pl_cb2d.bundle env MACOSX_DEPLOYMENT_TARGET=10.3 cc -bundle -undefined dynamic_looku +p -L/usr/local/lib -L/opt/local/lib -fstack-protector pm_example_pl_c +b2d.o -o blib/arch/auto/pm_example_pl_cb2d/pm_example_pl_cb2d.bundle + \ \ chmod 755 blib/arch/auto/pm_example_pl_cb2d/pm_example_pl_cb2d.bundle cp pm_example_pl_cb2d.bs blib/arch/auto/pm_example_pl_cb2d/pm_example_ +pl_cb2d.bs chmod 644 blib/arch/auto/pm_example_pl_cb2d/pm_example_pl_cb2d.bs Finished "make" Stage Starting "make install" Stage Files found in blib/arch: installing files in blib/lib into architectu +re dependent library tree Installing /Users/ken/tmp/_Inline/lib/auto/pm_example_pl_cb2d/pm_examp +le_pl_cb2d.bs Installing /Users/ken/tmp/_Inline/lib/auto/pm_example_pl_cb2d/pm_examp +le_pl_cb2d.bundle Finished "make install" Stage Starting Cleaning Up Stage Finished Cleaning Up Stage Finished Build Compile Stage $Config{nvtype}: double Different values 10000101111100000100011010000010100100111111000011011 10000101111100000100011010000010100100111111000011101

      -- Ken