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):

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_ae0b 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_ae0b.xs > pm_example_pl_ae0b.xsc && mv pm_example_ +pl_ae0b.xsc pm_example_pl_ae0b.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_ae0b.c Running Mkbootstrap for pm_example_pl_ae0b () chmod 644 pm_example_pl_ae0b.bs rm -f blib/arch/auto/pm_example_pl_ae0b/pm_example_pl_ae0b.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_a +e0b.o -o blib/arch/auto/pm_example_pl_ae0b/pm_example_pl_ae0b.bundle + \ \ chmod 755 blib/arch/auto/pm_example_pl_ae0b/pm_example_pl_ae0b.bundle cp pm_example_pl_ae0b.bs blib/arch/auto/pm_example_pl_ae0b/pm_example_ +pl_ae0b.bs chmod 644 blib/arch/auto/pm_example_pl_ae0b/pm_example_pl_ae0b.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_ae0b/pm_examp +le_pl_ae0b.bs Installing /Users/ken/tmp/_Inline/lib/auto/pm_example_pl_ae0b/pm_examp +le_pl_ae0b.bundle Finished "make install" Stage Starting Cleaning Up Stage Finished Cleaning Up Stage Finished Build Compile Stage $Config{nvtype}: double Different values Invalid type 'D' in pack at ./pm_example.pl line 21.

Here's my full perl -V:

-- 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