[Perldl] bug in longlong integer output

Andrew Benson abenson at obs.carnegiescience.edu
Wed Oct 9 14:39:36 HST 2013


I've found some cases where longlong integer types are output incorrectly (off 
by one). Here's an example:

#!/usr/bin/env perl                                                                                            
use strict;
use warnings;
use PDL;

my $a = pdl longlong(10555000100001144);
my $b = pdl longlong(10555000100001145);
my $ar = $a->get_dataref();
my $br = $b->get_dataref();
print $a." ".$b."\n";
print ${$ar}."\n";
print ${$br}."\n";

${$br} = "y".substr(${$br},1);
$b->upd_data();
print $a." ".$b."\n";
print ${$ar}."\n";
print ${$br}."\n";
print unpack("q",${$ar})." ".unpack("q",${$br})."\n";

exit;


I first try to create to PDLs with longlong type and differing by 1. If I write 
out the values they're identical, the first print statement reporting:

10555000100001144 10555000100001144

I can check that these two are actually internally identical by outputting the 
packed Perl string representation (second pair of print statements):

x��w�%
x��w�%

So, suppose I force the internal representations to be correct, by adjusting 
the packed string representation of $b. Then I write out the same information:

10555000100001144 10555000100001144
x��w�%
y��w�%

So, now the internal representations differ as they should. But when I write 
out the values they still look identical.

If I use unpack() to directly convert these strings to longlongs then I get 
the expected result:

10555000100001144 10555000100001145

So, this seems to be a bug in displaying the longlong type.

Note that if I use 10555000100001146 instead of 10555000100001145 it works as 
expected.

Here's the output from "pdl -V"

$ pdl -V
perlDL shell v1.354_001
 PDL comes with ABSOLUTELY NO WARRANTY. For details, see the file
 'COPYING' in the PDL distribution. This is free software and you
 are welcome to redistribute it under certain conditions, see
 the same file for details.

Summary of my PDL configuration

VERSION: PDL v2.4.11 (supports bad values)

$%PDL::Config = {
                  'BADVAL_PER_PDL' => '0',
                  'WITH_PROJ' => '0',
                  'PDL_CONFIG_VERSION' => '0.005',
                  'POSIX_THREADS_INC' => undef,
                  'FFTW_TYPE' => 'double',
                  'PDL_BUILD_DIR' => '/home/abenson/.cpan/build/PDL-2.4.11-
VeX7gG',
                  'FFTW_LIBS' => undef,
                  'WITH_FFTW' => '0',
                  'GSL_LIBS' => undef,
                  'WITH_IO_BROWSER' => '0',
                  'PROJ_INC' => undef,
                  'WHERE_PLPLOT_INCLUDE' => undef,
                  'HTML_DOCS' => '1',
                  'SKIP_KNOWN_PROBLEMS' => '0',
                  'WHERE_PLPLOT_LIBS' => undef,
                  'WITH_3D' => '0',
                  'WITH_POSIX_THREADS' => '1',
                  'POGL_VERSION' => '0.65',
                  'FFTW_INC' => undef,
                  'HIDE_TRYLINK' => '1',
                  'HDF_INC' => undef,
                  'WITH_HDF' => '0',
                  'POGL_WINDOW_TYPE' => 'glut',
                  'WITH_GD' => '0',
                  'WITH_BADVAL' => '1',
                  'FITS_LEGACY' => '1',
                  'WITH_SLATEC' => '1',
                  'BADVAL_USENAN' => '0',
                  'WITH_DEVEL_REPL' => '1',
                  'TEMPDIR' => '/tmp',
                  'PROJ_LIBS' => undef,
                  'USE_POGL' => '0',
                  'PDL_BUILD_VERSION' => '2.4.11',
                  'GD_LIBS' => undef,
                  'GSL_INC' => undef,
                  'GD_INC' => undef,
                  'WITH_GSL' => '0',
                  'OPTIMIZE' => undef,
                  'PDLDOC_IGNORE_AUTOLOADER' => '0',
                  'HDF_LIBS' => undef,
                  'POSIX_THREADS_LIBS' => undef,
                  'MALLOCDBG' => {},
                  'WITH_MINUIT' => '1',
                  'WITH_PLPLOT' => '0',
                  'MINUIT_LIB' => undef
                };
Summary of my perl5 (revision 5 version 8 subversion 8) configuration:
  Platform:
    osname=linux, osvers=2.6.18-53.el5, archname=x86_64-linux-thread-multi
    uname='linux builder10.centos.org 2.6.18-53.el5 #1 smp mon nov 12 02:14:55 
est 2007 x86_64 x86_64 x86_64 gnulinux '
    config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -
fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -
Dversion=5.8.8 -Dmyhostname=localhost -Dperladmin=root at localhost -Dcc=gcc -
Dcf_by=Red Hat, Inc. -Dinstallprefix=/usr -Dprefix=/usr -
Dlibpth=/usr/local/lib64 /lib64 /usr/lib64 -Dprivlib=/usr/lib/perl5/5.8.8 -
Dsitelib=/usr/lib/perl5/site_perl/5.8.8 -
Dvendorlib=/usr/lib/perl5/vendor_perl/5.8.8 -
Darchlib=/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi -
Dsitearch=/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi -
Dvendorarch=/usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi -
Darchname=x86_64-linux-thread-multi -Dvendorprefix=/usr -Dsiteprefix=/usr -
Duseshrplib -Dusethreads -Duseithreads -Duselargefiles -Dd_dosuid -
Dd_semctl_semun -Di_db -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -
Duseperlio -Dinstallusrbinperl=n -Ubincompat5005 -Uversiononly -
Dpager=/usr/bin/less -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -
Ud_sethostent_r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -
Ud_endservent_r_proto -Ud_setservent_r_proto -Dinc_version_list=5.8.7 5.8.6 
5.8.5 -Dscriptdir=/usr/bin'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=define use5005threads=undef useithreads=define 
usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=define use64bitall=define uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -
Wdeclaration-after-statement -I/usr/local/include -D_LARGEFILE_SOURCE -
D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm',
    optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-
protector --param=ssp-buffer-size=4 -m64 -mtune=generic',
    cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -
Wdeclaration-after-statement -I/usr/local/include -I/usr/include/gdbm'
    ccversion='', gccversion='4.1.2 20080704 (Red Hat 4.1.2-48)', 
gccosandvers=''
    intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16
    ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', 
lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =''
    libpth=/usr/local/lib64 /lib64 /usr/lib64
    libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread -lc
    perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.5'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-
rpath,/usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-
D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -
m64 -mtune=generic'

-Andrew


-- 

* Andrew Benson: http://users.obs.carnegiescience.edu/abenson/contact.html

* Galacticus: http://sites.google.com/site/galacticusmodel




More information about the Perldl mailing list