Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

printf %a mishandles negative pseudo-precision #15503

p5pRT opened this issue Aug 10, 2016 · 4 comments

printf %a mishandles negative pseudo-precision #15503

p5pRT opened this issue Aug 10, 2016 · 4 comments


Copy link

@p5pRT p5pRT commented Aug 10, 2016

Migrated from (status was 'resolved')

Searchable as RT128889$

Copy link
Collaborator Author

@p5pRT p5pRT commented Aug 10, 2016


Created by

$ perl -lwe 'printf "%.*a\n", -1, 1.03125'

The above output is incorrect​: it should be "0x1.08p+0". %a is
generally handling a precision specified by ".*" and separate argument
OK, equivalent to how it handles a precision specified in the format
string. It exhibits [perl #128888] for a zero precision either way.
If a negative precision is specified, which can only be done via ".*",
this is meant to be equivalent to not specifying a precision at all
(per L<perldoc/sprintf>, printf(3), and the C standard). Not specifying
a precision for %a means that enough fractional digits must be emitted
to show the value exactly, and this does happen if the precision is not
specified at all​:

$ perl -lwe 'printf "%a\n", 1.03125'

The decimal %e, for which precision defaults to 6, handles a negative
precision correctly​:

$ perl -lwe 'printf "%.*e\n", 1, 1.03125'
$ perl -lwe 'printf "%.*e\n", -1, 1.03125'
$ perl -lwe 'printf "%e\n", 1.03125'

Perl Info


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:
    osname=linux, osvers=3.16.0-4-amd64, archname=x86_64-linux-thread-multi
    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-f52 -Duselargefiles -Dusethreads -Uafs -Ud_csh -Uusesfio -Uusenm -Duseshrplib -Dusedevel -Uversiononly -Ui_db'
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    use64bitint=define, use64bitall=define, uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
    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',
    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='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=8, 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,
  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-f52/lib/5.24.0/x86_64-linux-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags='-shared -O2 -L/usr/local/lib -fstack-protector-strong'

@INC for perl 5.24.0:

Environment for perl 5.24.0:
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
    PERL_BADLANG (unset)

Copy link
Collaborator Author

@p5pRT p5pRT commented Aug 23, 2016

From @jhi

Marking resolved until proven otherwise.

Copy link
Collaborator Author

@p5pRT p5pRT commented Aug 23, 2016

The RT System itself - Status changed from 'new' to 'open'

@p5pRT p5pRT closed this Aug 23, 2016
Copy link
Collaborator Author

@p5pRT p5pRT commented Aug 23, 2016

@jhi - Status changed from 'open' to 'resolved'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant
You can’t perform that action at this time.