Skip Menu |
Report information
Id: 128909
Status: resolved
Priority: 0/
Queue: perl5

Owner: Nobody
Requestors: zefram [at]

Operating System: Linux
PatchStatus: (no value)
Severity: low
Type: core
Perl Version: 5.24.0
Fixed In: (no value)

Date: Fri, 12 Aug 2016 12:51:35 +0100
Subject: printf %a mishandles exponent-crossing rounding with long double
To: perlbug [...]
CC: zefram [...]
From: zefram [...]
Download (untitled) / with headers
text/plain 3.9k
This is a bug report for perl from, generated with the help of perlbug 1.40 running under perl 5.24.0. ----------------------------------------------------------------- [Please describe your issue here] On an x86 long-double build (63 fractional significand bits): $ perl -lwe 'printf "%a\n", 1.9999999999999999999' 0xf.fffffffffffffffp-3 $ perl -lwe 'printf "%.3a\n", 1.9999999999999999999' 0x10.000p-3 The latter output is wrong. It is numerically correct, but (per the C spec) it is not permitted to have more than one hex digit before the radix point. It is necessary for the output to be expressed with a higher exponent, such as "0x1.000p+1". FWIW, glibc uses the same digit alignment for this long double type, so gives identical output for the unrounded case, and gives "0x1.000p+1" for the rounded case. [Please do not change anything below this line] ----------------------------------------------------------------- --- Flags: category=core severity=low --- Site configuration information for perl 5.24.0: Configured by zefram at Mon May 9 19:42:55 BST 2016. Summary of my perl5 (revision 5 version 24 subversion 0) configuration: Platform: osname=linux, osvers=3.16.0-4-amd64, archname=x86_64-linux-thread-multi-ld uname='linux 3.16.0-4-amd64 #1 smp debian 3.16.7-ckt11-1+deb8u6 (2015-11-09) x86_64 gnulinux ' config_args='-des -Dprefix=/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63 -Duselargefiles -Dusethreads -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dusedevel -Uversiononly -Ui_db -Duselongdouble' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define use64bitint=define, use64bitall=define, uselongdouble=define usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_FORTIFY_SOURCE=2', optimize='-O2', cppflags='-D_REENTRANT -D_GNU_SOURCE -fwrapv -fno-strict-aliasing -pipe -fstack-protector-strong -I/usr/local/include' ccversion='', gccversion='4.9.2', gccosandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678, doublekind=3 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16, longdblkind=3 ivtype='long', ivsize=8, nvtype='long double', nvsize=16, Off_t='off_t', lseeksize=8 alignbytes=16, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector-strong -L/usr/local/lib' libpth=/usr/local/lib /usr/lib/gcc/x86_64-linux-gnu/4.9/include-fixed /usr/include/x86_64-linux-gnu /usr/lib /lib/x86_64-linux-gnu /lib/../lib /usr/lib/x86_64-linux-gnu /usr/lib/../lib /lib libs=-lpthread -lnsl -ldb -ldl -lm -lcrypt -lutil -lc perllibs=-lpthread -lnsl -ldl -lm -lcrypt -lutil -lc, so=so, useshrplib=true, gnulibc_version='2.19' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63/lib/5.24.0/x86_64-linux-thread-multi-ld/CORE' cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong' --- @INC for perl 5.24.0: /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63/lib/site_perl/5.24.0/x86_64-linux-thread-multi-ld /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63/lib/site_perl/5.24.0 /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63/lib/5.24.0/x86_64-linux-thread-multi-ld /home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63/lib/5.24.0 . --- Environment for perl 5.24.0: HOME=/home/zefram LANG (unset) LANGUAGE (unset) LD_LIBRARY_PATH (unset) LOGDIR (unset) PATH=/home/zefram/usr/perl/perl_install/perl-5.24.0-i64-f63/bin:/home/zefram/usr/perl/util:/home/zefram/pub/x86_64-unknown-linux-gnu/bin:/home/zefram/pub/common/bin:/usr/bin:/bin:/usr/local/bin:/usr/games PERL_BADLANG (unset) SHELL=/usr/bin/zsh
RT-Send-CC: perl5-porters [...]
Download (untitled) / with headers
text/plain 103b
RT-Send-CC: perl5-porters [...]
Marking resolved until proven otherwise.

This service is sponsored and maintained by Best Practical Solutions and runs on infrastructure.

For issues related to this RT instance (aka "perlbug"), please contact perlbug-admin at