[Python-Dev] [Python-checkins] r64424 - in python/trunk:Include/object.h Lib/test/test_sys.py Misc/NEWSObjects/intobject.c Objects/longobject.c Objects/typeobject.cPython/bltinmodule.c (original) (raw)

"Martin v. Löwis" martin at v.loewis.de
Thu Jun 26 23:47:31 CEST 2008


Guido van Rossum wrote:

On Thu, Jun 26, 2008 at 1:46 PM, Mark Dickinson <dickinsm at gmail.com> wrote:

I'd be delighted with '%a' support. Remind me what %a does?

It's a C99 feature. From the spec (7.19.6.1p8)

   a,A     A  double  argument  representing  a  floating-point
           number is converted  in  the  style  [-]0xh.hhhhp±d,
           where  there  is  one  hexadecimal  digit  (which is
           nonzero if the argument is  a  normalized  floating-
           point  number  and  is otherwise unspecified) before
           the decimal-point character235) and  the  number  of
           hexadecimal   digits   after  it  is  equal  to  the
           precision; if the precision is missing and FLT_RADIX
           is  a  power  of 2, then the precision is sufficient
           for an exact representation of  the  value;  if  the
           precision is missing and FLT_RADIX is not a power of
           2,   then   the   precision   is    sufficient    to
           distinguish236) values of type double,  except  that
           trailing  zeros  may be omitted; if the precision is
           zero and the # flag is not  specified,  no  decimal-
           point  character  appears.   The  letters abcdef are
           used for a conversion and the letters ABCDEF  for  A
           conversion.   The  A conversion specifier produces a
           number with X  and  P  instead  of  x  and  p.   The
           exponent  always  contains  at  least one digit, and
           only as many more digits as necessary  to  represent
           the  decimal  exponent  of 2.  If the value is zero,
           the exponent is zero.

           A double argument representing an infinity or NaN is
           converted  in  the  style  of  an  f or F conversion
           specifier.

Footnotes 235) Binary implementations can choose the hexadecimal digit to the left of the decimal-point character so that subsequent digits align to nibble (4-bit) boundaries.

 236) The  precision  p  is sufficient to distinguish values of
      the source type if 16p-1>bn where b is FLT_RADIX and n is
      the  number  of  base-b  digits in the significand of the
      source type.  A smaller p might suffice depending on  the
      implementation's  scheme for determining the digit to the
      left of the decimal-point character.

This is symmetric with C99's hexadecimal floating point literals:

hexadecimal-floating-constant: hexadecimal-prefix hexadecimal-fractional-constant binary-exponent-part floating-suffix-opt hexadecimal-prefix hexadecimal-digit-sequence binary-exponent-part floating-suffix-opt

hexadecimal-fractional-constant: hexadecimal-digit-sequence-opt . hexadecimal-digit-sequence hexadecimal-digit-sequence .

binary-exponent-part: p sign-opt digit-sequence P sign-opt digit-sequence

hexadecimal-digit-sequence: hexadecimal-digit hexadecimal-digit-sequence hexadecimal-digit

scanf and strtod support the same format.

Regards, Martin



More information about the Python-Dev mailing list