Home | History | Annotate | Download | only in Python
      1 /****************************************************************
      2  *
      3  * The author of this software is David M. Gay.
      4  *
      5  * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
      6  *
      7  * Permission to use, copy, modify, and distribute this software for any
      8  * purpose without fee is hereby granted, provided that this entire notice
      9  * is included in all copies of any software which is or includes a copy
     10  * or modification of this software and in all copies of the supporting
     11  * documentation for such software.
     12  *
     13  * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
     14  * WARRANTY.  IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
     15  * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
     16  * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
     17  *
     18  ***************************************************************/
     19 
     20 /****************************************************************
     21  * This is dtoa.c by David M. Gay, downloaded from
     22  * http://www.netlib.org/fp/dtoa.c on April 15, 2009 and modified for
     23  * inclusion into the Python core by Mark E. T. Dickinson and Eric V. Smith.
     24  *
     25  * Please remember to check http://www.netlib.org/fp regularly (and especially
     26  * before any Python release) for bugfixes and updates.
     27  *
     28  * The major modifications from Gay's original code are as follows:
     29  *
     30  *  0. The original code has been specialized to Python's needs by removing
     31  *     many of the #ifdef'd sections.  In particular, code to support VAX and
     32  *     IBM floating-point formats, hex NaNs, hex floats, locale-aware
     33  *     treatment of the decimal point, and setting of the inexact flag have
     34  *     been removed.
     35  *
     36  *  1. We use PyMem_Malloc and PyMem_Free in place of malloc and free.
     37  *
     38  *  2. The public functions strtod, dtoa and freedtoa all now have
     39  *     a _Py_dg_ prefix.
     40  *
     41  *  3. Instead of assuming that PyMem_Malloc always succeeds, we thread
     42  *     PyMem_Malloc failures through the code.  The functions
     43  *
     44  *       Balloc, multadd, s2b, i2b, mult, pow5mult, lshift, diff, d2b
     45  *
     46  *     of return type *Bigint all return NULL to indicate a malloc failure.
     47  *     Similarly, rv_alloc and nrv_alloc (return type char *) return NULL on
     48  *     failure.  bigcomp now has return type int (it used to be void) and
     49  *     returns -1 on failure and 0 otherwise.  _Py_dg_dtoa returns NULL
     50  *     on failure.  _Py_dg_strtod indicates failure due to malloc failure
     51  *     by returning -1.0, setting errno=ENOMEM and *se to s00.
     52  *
     53  *  4. The static variable dtoa_result has been removed.  Callers of
     54  *     _Py_dg_dtoa are expected to call _Py_dg_freedtoa to free
     55  *     the memory allocated by _Py_dg_dtoa.
     56  *
     57  *  5. The code has been reformatted to better fit with Python's
     58  *     C style guide (PEP 7).
     59  *
     60  *  6. A bug in the memory allocation has been fixed: to avoid FREEing memory
     61  *     that hasn't been MALLOC'ed, private_mem should only be used when k <=
     62  *     Kmax.
     63  *
     64  *  7. _Py_dg_strtod has been modified so that it doesn't accept strings with
     65  *     leading whitespace.
     66  *
     67  ***************************************************************/
     68 
     69 /* Please send bug reports for the original dtoa.c code to David M. Gay (dmg
     70  * at acm dot org, with " at " changed at "@" and " dot " changed to ".").
     71  * Please report bugs for this modified version using the Python issue tracker
     72  * (http://bugs.python.org). */
     73 
     74 /* On a machine with IEEE extended-precision registers, it is
     75  * necessary to specify double-precision (53-bit) rounding precision
     76  * before invoking strtod or dtoa.  If the machine uses (the equivalent
     77  * of) Intel 80x87 arithmetic, the call
     78  *      _control87(PC_53, MCW_PC);
     79  * does this with many compilers.  Whether this or another call is
     80  * appropriate depends on the compiler; for this to work, it may be
     81  * necessary to #include "float.h" or another system-dependent header
     82  * file.
     83  */
     84 
     85 /* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
     86  *
     87  * This strtod returns a nearest machine number to the input decimal
     88  * string (or sets errno to ERANGE).  With IEEE arithmetic, ties are
     89  * broken by the IEEE round-even rule.  Otherwise ties are broken by
     90  * biased rounding (add half and chop).
     91  *
     92  * Inspired loosely by William D. Clinger's paper "How to Read Floating
     93  * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
     94  *
     95  * Modifications:
     96  *
     97  *      1. We only require IEEE, IBM, or VAX double-precision
     98  *              arithmetic (not IEEE double-extended).
     99  *      2. We get by with floating-point arithmetic in a case that
    100  *              Clinger missed -- when we're computing d * 10^n
    101  *              for a small integer d and the integer n is not too
    102  *              much larger than 22 (the maximum integer k for which
    103  *              we can represent 10^k exactly), we may be able to
    104  *              compute (d*10^k) * 10^(e-k) with just one roundoff.
    105  *      3. Rather than a bit-at-a-time adjustment of the binary
    106  *              result in the hard case, we use floating-point
    107  *              arithmetic to determine the adjustment to within
    108  *              one bit; only in really hard cases do we need to
    109  *              compute a second residual.
    110  *      4. Because of 3., we don't need a large table of powers of 10
    111  *              for ten-to-e (just some small tables, e.g. of 10^k
    112  *              for 0 <= k <= 22).
    113  */
    114 
    115 /* Linking of Python's #defines to Gay's #defines starts here. */
    116 
    117 #include "Python.h"
    118 
    119 /* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
    120    the following code */
    121 #ifndef PY_NO_SHORT_FLOAT_REPR
    122 
    123 #include "float.h"
    124 
    125 #define MALLOC PyMem_Malloc
    126 #define FREE PyMem_Free
    127 
    128 /* This code should also work for ARM mixed-endian format on little-endian
    129    machines, where doubles have byte order 45670123 (in increasing address
    130    order, 0 being the least significant byte). */
    131 #ifdef DOUBLE_IS_LITTLE_ENDIAN_IEEE754
    132 #  define IEEE_8087
    133 #endif
    134 #if defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) ||  \
    135   defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754)
    136 #  define IEEE_MC68k
    137 #endif
    138 #if defined(IEEE_8087) + defined(IEEE_MC68k) != 1
    139 #error "Exactly one of IEEE_8087 or IEEE_MC68k should be defined."
    140 #endif
    141 
    142 /* The code below assumes that the endianness of integers matches the
    143    endianness of the two 32-bit words of a double.  Check this. */
    144 #if defined(WORDS_BIGENDIAN) && (defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) || \
    145                                  defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754))
    146 #error "doubles and ints have incompatible endianness"
    147 #endif
    148 
    149 #if !defined(WORDS_BIGENDIAN) && defined(DOUBLE_IS_BIG_ENDIAN_IEEE754)
    150 #error "doubles and ints have incompatible endianness"
    151 #endif
    152 
    153 
    154 #if defined(HAVE_UINT32_T) && defined(HAVE_INT32_T)
    155 typedef PY_UINT32_T ULong;
    156 typedef PY_INT32_T Long;
    157 #else
    158 #error "Failed to find an exact-width 32-bit integer type"
    159 #endif
    160 
    161 #if defined(HAVE_UINT64_T)
    162 #define ULLong PY_UINT64_T
    163 #else
    164 #undef ULLong
    165 #endif
    166 
    167 #undef DEBUG
    168 #ifdef Py_DEBUG
    169 #define DEBUG
    170 #endif
    171 
    172 /* End Python #define linking */
    173 
    174 #ifdef DEBUG
    175 #define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
    176 #endif
    177 
    178 #ifndef PRIVATE_MEM
    179 #define PRIVATE_MEM 2304
    180 #endif
    181 #define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
    182 static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
    183 
    184 #ifdef __cplusplus
    185 extern "C" {
    186 #endif
    187 
    188 typedef union { double d; ULong L[2]; } U;
    189 
    190 #ifdef IEEE_8087
    191 #define word0(x) (x)->L[1]
    192 #define word1(x) (x)->L[0]
    193 #else
    194 #define word0(x) (x)->L[0]
    195 #define word1(x) (x)->L[1]
    196 #endif
    197 #define dval(x) (x)->d
    198 
    199 #ifndef STRTOD_DIGLIM
    200 #define STRTOD_DIGLIM 40
    201 #endif
    202 
    203 /* maximum permitted exponent value for strtod; exponents larger than
    204    MAX_ABS_EXP in absolute value get truncated to +-MAX_ABS_EXP.  MAX_ABS_EXP
    205    should fit into an int. */
    206 #ifndef MAX_ABS_EXP
    207 #define MAX_ABS_EXP 1100000000U
    208 #endif
    209 /* Bound on length of pieces of input strings in _Py_dg_strtod; specifically,
    210    this is used to bound the total number of digits ignoring leading zeros and
    211    the number of digits that follow the decimal point.  Ideally, MAX_DIGITS
    212    should satisfy MAX_DIGITS + 400 < MAX_ABS_EXP; that ensures that the
    213    exponent clipping in _Py_dg_strtod can't affect the value of the output. */
    214 #ifndef MAX_DIGITS
    215 #define MAX_DIGITS 1000000000U
    216 #endif
    217 
    218 /* Guard against trying to use the above values on unusual platforms with ints
    219  * of width less than 32 bits. */
    220 #if MAX_ABS_EXP > INT_MAX
    221 #error "MAX_ABS_EXP should fit in an int"
    222 #endif
    223 #if MAX_DIGITS > INT_MAX
    224 #error "MAX_DIGITS should fit in an int"
    225 #endif
    226 
    227 /* The following definition of Storeinc is appropriate for MIPS processors.
    228  * An alternative that might be better on some machines is
    229  * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
    230  */
    231 #if defined(IEEE_8087)
    232 #define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b,  \
    233                          ((unsigned short *)a)[0] = (unsigned short)c, a++)
    234 #else
    235 #define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b,  \
    236                          ((unsigned short *)a)[1] = (unsigned short)c, a++)
    237 #endif
    238 
    239 /* #define P DBL_MANT_DIG */
    240 /* Ten_pmax = floor(P*log(2)/log(5)) */
    241 /* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
    242 /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
    243 /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
    244 
    245 #define Exp_shift  20
    246 #define Exp_shift1 20
    247 #define Exp_msk1    0x100000
    248 #define Exp_msk11   0x100000
    249 #define Exp_mask  0x7ff00000
    250 #define P 53
    251 #define Nbits 53
    252 #define Bias 1023
    253 #define Emax 1023
    254 #define Emin (-1022)
    255 #define Etiny (-1074)  /* smallest denormal is 2**Etiny */
    256 #define Exp_1  0x3ff00000
    257 #define Exp_11 0x3ff00000
    258 #define Ebits 11
    259 #define Frac_mask  0xfffff
    260 #define Frac_mask1 0xfffff
    261 #define Ten_pmax 22
    262 #define Bletch 0x10
    263 #define Bndry_mask  0xfffff
    264 #define Bndry_mask1 0xfffff
    265 #define Sign_bit 0x80000000
    266 #define Log2P 1
    267 #define Tiny0 0
    268 #define Tiny1 1
    269 #define Quick_max 14
    270 #define Int_max 14
    271 
    272 #ifndef Flt_Rounds
    273 #ifdef FLT_ROUNDS
    274 #define Flt_Rounds FLT_ROUNDS
    275 #else
    276 #define Flt_Rounds 1
    277 #endif
    278 #endif /*Flt_Rounds*/
    279 
    280 #define Rounding Flt_Rounds
    281 
    282 #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
    283 #define Big1 0xffffffff
    284 
    285 /* struct BCinfo is used to pass information from _Py_dg_strtod to bigcomp */
    286 
    287 typedef struct BCinfo BCinfo;
    288 struct
    289 BCinfo {
    290     int e0, nd, nd0, scale;
    291 };
    292 
    293 #define FFFFFFFF 0xffffffffUL
    294 
    295 #define Kmax 7
    296 
    297 /* struct Bigint is used to represent arbitrary-precision integers.  These
    298    integers are stored in sign-magnitude format, with the magnitude stored as
    299    an array of base 2**32 digits.  Bigints are always normalized: if x is a
    300    Bigint then x->wds >= 1, and either x->wds == 1 or x[wds-1] is nonzero.
    301 
    302    The Bigint fields are as follows:
    303 
    304      - next is a header used by Balloc and Bfree to keep track of lists
    305          of freed Bigints;  it's also used for the linked list of
    306          powers of 5 of the form 5**2**i used by pow5mult.
    307      - k indicates which pool this Bigint was allocated from
    308      - maxwds is the maximum number of words space was allocated for
    309        (usually maxwds == 2**k)
    310      - sign is 1 for negative Bigints, 0 for positive.  The sign is unused
    311        (ignored on inputs, set to 0 on outputs) in almost all operations
    312        involving Bigints: a notable exception is the diff function, which
    313        ignores signs on inputs but sets the sign of the output correctly.
    314      - wds is the actual number of significant words
    315      - x contains the vector of words (digits) for this Bigint, from least
    316        significant (x[0]) to most significant (x[wds-1]).
    317 */
    318 
    319 struct
    320 Bigint {
    321     struct Bigint *next;
    322     int k, maxwds, sign, wds;
    323     ULong x[1];
    324 };
    325 
    326 typedef struct Bigint Bigint;
    327 
    328 #ifndef Py_USING_MEMORY_DEBUGGER
    329 
    330 /* Memory management: memory is allocated from, and returned to, Kmax+1 pools
    331    of memory, where pool k (0 <= k <= Kmax) is for Bigints b with b->maxwds ==
    332    1 << k.  These pools are maintained as linked lists, with freelist[k]
    333    pointing to the head of the list for pool k.
    334 
    335    On allocation, if there's no free slot in the appropriate pool, MALLOC is
    336    called to get more memory.  This memory is not returned to the system until
    337    Python quits.  There's also a private memory pool that's allocated from
    338    in preference to using MALLOC.
    339 
    340    For Bigints with more than (1 << Kmax) digits (which implies at least 1233
    341    decimal digits), memory is directly allocated using MALLOC, and freed using
    342    FREE.
    343 
    344    XXX: it would be easy to bypass this memory-management system and
    345    translate each call to Balloc into a call to PyMem_Malloc, and each
    346    Bfree to PyMem_Free.  Investigate whether this has any significant
    347    performance on impact. */
    348 
    349 static Bigint *freelist[Kmax+1];
    350 
    351 /* Allocate space for a Bigint with up to 1<<k digits */
    352 
    353 static Bigint *
    354 Balloc(int k)
    355 {
    356     int x;
    357     Bigint *rv;
    358     unsigned int len;
    359 
    360     if (k <= Kmax && (rv = freelist[k]))
    361         freelist[k] = rv->next;
    362     else {
    363         x = 1 << k;
    364         len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
    365             /sizeof(double);
    366         if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
    367             rv = (Bigint*)pmem_next;
    368             pmem_next += len;
    369         }
    370         else {
    371             rv = (Bigint*)MALLOC(len*sizeof(double));
    372             if (rv == NULL)
    373                 return NULL;
    374         }
    375         rv->k = k;
    376         rv->maxwds = x;
    377     }
    378     rv->sign = rv->wds = 0;
    379     return rv;
    380 }
    381 
    382 /* Free a Bigint allocated with Balloc */
    383 
    384 static void
    385 Bfree(Bigint *v)
    386 {
    387     if (v) {
    388         if (v->k > Kmax)
    389             FREE((void*)v);
    390         else {
    391             v->next = freelist[v->k];
    392             freelist[v->k] = v;
    393         }
    394     }
    395 }
    396 
    397 #else
    398 
    399 /* Alternative versions of Balloc and Bfree that use PyMem_Malloc and
    400    PyMem_Free directly in place of the custom memory allocation scheme above.
    401    These are provided for the benefit of memory debugging tools like
    402    Valgrind. */
    403 
    404 /* Allocate space for a Bigint with up to 1<<k digits */
    405 
    406 static Bigint *
    407 Balloc(int k)
    408 {
    409     int x;
    410     Bigint *rv;
    411     unsigned int len;
    412 
    413     x = 1 << k;
    414     len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
    415         /sizeof(double);
    416 
    417     rv = (Bigint*)MALLOC(len*sizeof(double));
    418     if (rv == NULL)
    419         return NULL;
    420 
    421     rv->k = k;
    422     rv->maxwds = x;
    423     rv->sign = rv->wds = 0;
    424     return rv;
    425 }
    426 
    427 /* Free a Bigint allocated with Balloc */
    428 
    429 static void
    430 Bfree(Bigint *v)
    431 {
    432     if (v) {
    433         FREE((void*)v);
    434     }
    435 }
    436 
    437 #endif /* Py_USING_MEMORY_DEBUGGER */
    438 
    439 #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign,   \
    440                           y->wds*sizeof(Long) + 2*sizeof(int))
    441 
    442 /* Multiply a Bigint b by m and add a.  Either modifies b in place and returns
    443    a pointer to the modified b, or Bfrees b and returns a pointer to a copy.
    444    On failure, return NULL.  In this case, b will have been already freed. */
    445 
    446 static Bigint *
    447 multadd(Bigint *b, int m, int a)       /* multiply by m and add a */
    448 {
    449     int i, wds;
    450 #ifdef ULLong
    451     ULong *x;
    452     ULLong carry, y;
    453 #else
    454     ULong carry, *x, y;
    455     ULong xi, z;
    456 #endif
    457     Bigint *b1;
    458 
    459     wds = b->wds;
    460     x = b->x;
    461     i = 0;
    462     carry = a;
    463     do {
    464 #ifdef ULLong
    465         y = *x * (ULLong)m + carry;
    466         carry = y >> 32;
    467         *x++ = (ULong)(y & FFFFFFFF);
    468 #else
    469         xi = *x;
    470         y = (xi & 0xffff) * m + carry;
    471         z = (xi >> 16) * m + (y >> 16);
    472         carry = z >> 16;
    473         *x++ = (z << 16) + (y & 0xffff);
    474 #endif
    475     }
    476     while(++i < wds);
    477     if (carry) {
    478         if (wds >= b->maxwds) {
    479             b1 = Balloc(b->k+1);
    480             if (b1 == NULL){
    481                 Bfree(b);
    482                 return NULL;
    483             }
    484             Bcopy(b1, b);
    485             Bfree(b);
    486             b = b1;
    487         }
    488         b->x[wds++] = (ULong)carry;
    489         b->wds = wds;
    490     }
    491     return b;
    492 }
    493 
    494 /* convert a string s containing nd decimal digits (possibly containing a
    495    decimal separator at position nd0, which is ignored) to a Bigint.  This
    496    function carries on where the parsing code in _Py_dg_strtod leaves off: on
    497    entry, y9 contains the result of converting the first 9 digits.  Returns
    498    NULL on failure. */
    499 
    500 static Bigint *
    501 s2b(const char *s, int nd0, int nd, ULong y9)
    502 {
    503     Bigint *b;
    504     int i, k;
    505     Long x, y;
    506 
    507     x = (nd + 8) / 9;
    508     for(k = 0, y = 1; x > y; y <<= 1, k++) ;
    509     b = Balloc(k);
    510     if (b == NULL)
    511         return NULL;
    512     b->x[0] = y9;
    513     b->wds = 1;
    514 
    515     if (nd <= 9)
    516       return b;
    517 
    518     s += 9;
    519     for (i = 9; i < nd0; i++) {
    520         b = multadd(b, 10, *s++ - '0');
    521         if (b == NULL)
    522             return NULL;
    523     }
    524     s++;
    525     for(; i < nd; i++) {
    526         b = multadd(b, 10, *s++ - '0');
    527         if (b == NULL)
    528             return NULL;
    529     }
    530     return b;
    531 }
    532 
    533 /* count leading 0 bits in the 32-bit integer x. */
    534 
    535 static int
    536 hi0bits(ULong x)
    537 {
    538     int k = 0;
    539 
    540     if (!(x & 0xffff0000)) {
    541         k = 16;
    542         x <<= 16;
    543     }
    544     if (!(x & 0xff000000)) {
    545         k += 8;
    546         x <<= 8;
    547     }
    548     if (!(x & 0xf0000000)) {
    549         k += 4;
    550         x <<= 4;
    551     }
    552     if (!(x & 0xc0000000)) {
    553         k += 2;
    554         x <<= 2;
    555     }
    556     if (!(x & 0x80000000)) {
    557         k++;
    558         if (!(x & 0x40000000))
    559             return 32;
    560     }
    561     return k;
    562 }
    563 
    564 /* count trailing 0 bits in the 32-bit integer y, and shift y right by that
    565    number of bits. */
    566 
    567 static int
    568 lo0bits(ULong *y)
    569 {
    570     int k;
    571     ULong x = *y;
    572 
    573     if (x & 7) {
    574         if (x & 1)
    575             return 0;
    576         if (x & 2) {
    577             *y = x >> 1;
    578             return 1;
    579         }
    580         *y = x >> 2;
    581         return 2;
    582     }
    583     k = 0;
    584     if (!(x & 0xffff)) {
    585         k = 16;
    586         x >>= 16;
    587     }
    588     if (!(x & 0xff)) {
    589         k += 8;
    590         x >>= 8;
    591     }
    592     if (!(x & 0xf)) {
    593         k += 4;
    594         x >>= 4;
    595     }
    596     if (!(x & 0x3)) {
    597         k += 2;
    598         x >>= 2;
    599     }
    600     if (!(x & 1)) {
    601         k++;
    602         x >>= 1;
    603         if (!x)
    604             return 32;
    605     }
    606     *y = x;
    607     return k;
    608 }
    609 
    610 /* convert a small nonnegative integer to a Bigint */
    611 
    612 static Bigint *
    613 i2b(int i)
    614 {
    615     Bigint *b;
    616 
    617     b = Balloc(1);
    618     if (b == NULL)
    619         return NULL;
    620     b->x[0] = i;
    621     b->wds = 1;
    622     return b;
    623 }
    624 
    625 /* multiply two Bigints.  Returns a new Bigint, or NULL on failure.  Ignores
    626    the signs of a and b. */
    627 
    628 static Bigint *
    629 mult(Bigint *a, Bigint *b)
    630 {
    631     Bigint *c;
    632     int k, wa, wb, wc;
    633     ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
    634     ULong y;
    635 #ifdef ULLong
    636     ULLong carry, z;
    637 #else
    638     ULong carry, z;
    639     ULong z2;
    640 #endif
    641 
    642     if ((!a->x[0] && a->wds == 1) || (!b->x[0] && b->wds == 1)) {
    643         c = Balloc(0);
    644         if (c == NULL)
    645             return NULL;
    646         c->wds = 1;
    647         c->x[0] = 0;
    648         return c;
    649     }
    650 
    651     if (a->wds < b->wds) {
    652         c = a;
    653         a = b;
    654         b = c;
    655     }
    656     k = a->k;
    657     wa = a->wds;
    658     wb = b->wds;
    659     wc = wa + wb;
    660     if (wc > a->maxwds)
    661         k++;
    662     c = Balloc(k);
    663     if (c == NULL)
    664         return NULL;
    665     for(x = c->x, xa = x + wc; x < xa; x++)
    666         *x = 0;
    667     xa = a->x;
    668     xae = xa + wa;
    669     xb = b->x;
    670     xbe = xb + wb;
    671     xc0 = c->x;
    672 #ifdef ULLong
    673     for(; xb < xbe; xc0++) {
    674         if ((y = *xb++)) {
    675             x = xa;
    676             xc = xc0;
    677             carry = 0;
    678             do {
    679                 z = *x++ * (ULLong)y + *xc + carry;
    680                 carry = z >> 32;
    681                 *xc++ = (ULong)(z & FFFFFFFF);
    682             }
    683             while(x < xae);
    684             *xc = (ULong)carry;
    685         }
    686     }
    687 #else
    688     for(; xb < xbe; xb++, xc0++) {
    689         if (y = *xb & 0xffff) {
    690             x = xa;
    691             xc = xc0;
    692             carry = 0;
    693             do {
    694                 z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
    695                 carry = z >> 16;
    696                 z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
    697                 carry = z2 >> 16;
    698                 Storeinc(xc, z2, z);
    699             }
    700             while(x < xae);
    701             *xc = carry;
    702         }
    703         if (y = *xb >> 16) {
    704             x = xa;
    705             xc = xc0;
    706             carry = 0;
    707             z2 = *xc;
    708             do {
    709                 z = (*x & 0xffff) * y + (*xc >> 16) + carry;
    710                 carry = z >> 16;
    711                 Storeinc(xc, z, z2);
    712                 z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
    713                 carry = z2 >> 16;
    714             }
    715             while(x < xae);
    716             *xc = z2;
    717         }
    718     }
    719 #endif
    720     for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
    721     c->wds = wc;
    722     return c;
    723 }
    724 
    725 #ifndef Py_USING_MEMORY_DEBUGGER
    726 
    727 /* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */
    728 
    729 static Bigint *p5s;
    730 
    731 /* multiply the Bigint b by 5**k.  Returns a pointer to the result, or NULL on
    732    failure; if the returned pointer is distinct from b then the original
    733    Bigint b will have been Bfree'd.   Ignores the sign of b. */
    734 
    735 static Bigint *
    736 pow5mult(Bigint *b, int k)
    737 {
    738     Bigint *b1, *p5, *p51;
    739     int i;
    740     static int p05[3] = { 5, 25, 125 };
    741 
    742     if ((i = k & 3)) {
    743         b = multadd(b, p05[i-1], 0);
    744         if (b == NULL)
    745             return NULL;
    746     }
    747 
    748     if (!(k >>= 2))
    749         return b;
    750     p5 = p5s;
    751     if (!p5) {
    752         /* first time */
    753         p5 = i2b(625);
    754         if (p5 == NULL) {
    755             Bfree(b);
    756             return NULL;
    757         }
    758         p5s = p5;
    759         p5->next = 0;
    760     }
    761     for(;;) {
    762         if (k & 1) {
    763             b1 = mult(b, p5);
    764             Bfree(b);
    765             b = b1;
    766             if (b == NULL)
    767                 return NULL;
    768         }
    769         if (!(k >>= 1))
    770             break;
    771         p51 = p5->next;
    772         if (!p51) {
    773             p51 = mult(p5,p5);
    774             if (p51 == NULL) {
    775                 Bfree(b);
    776                 return NULL;
    777             }
    778             p51->next = 0;
    779             p5->next = p51;
    780         }
    781         p5 = p51;
    782     }
    783     return b;
    784 }
    785 
    786 #else
    787 
    788 /* Version of pow5mult that doesn't cache powers of 5. Provided for
    789    the benefit of memory debugging tools like Valgrind. */
    790 
    791 static Bigint *
    792 pow5mult(Bigint *b, int k)
    793 {
    794     Bigint *b1, *p5, *p51;
    795     int i;
    796     static int p05[3] = { 5, 25, 125 };
    797 
    798     if ((i = k & 3)) {
    799         b = multadd(b, p05[i-1], 0);
    800         if (b == NULL)
    801             return NULL;
    802     }
    803 
    804     if (!(k >>= 2))
    805         return b;
    806     p5 = i2b(625);
    807     if (p5 == NULL) {
    808         Bfree(b);
    809         return NULL;
    810     }
    811 
    812     for(;;) {
    813         if (k & 1) {
    814             b1 = mult(b, p5);
    815             Bfree(b);
    816             b = b1;
    817             if (b == NULL) {
    818                 Bfree(p5);
    819                 return NULL;
    820             }
    821         }
    822         if (!(k >>= 1))
    823             break;
    824         p51 = mult(p5, p5);
    825         Bfree(p5);
    826         p5 = p51;
    827         if (p5 == NULL) {
    828             Bfree(b);
    829             return NULL;
    830         }
    831     }
    832     Bfree(p5);
    833     return b;
    834 }
    835 
    836 #endif /* Py_USING_MEMORY_DEBUGGER */
    837 
    838 /* shift a Bigint b left by k bits.  Return a pointer to the shifted result,
    839    or NULL on failure.  If the returned pointer is distinct from b then the
    840    original b will have been Bfree'd.   Ignores the sign of b. */
    841 
    842 static Bigint *
    843 lshift(Bigint *b, int k)
    844 {
    845     int i, k1, n, n1;
    846     Bigint *b1;
    847     ULong *x, *x1, *xe, z;
    848 
    849     if (!k || (!b->x[0] && b->wds == 1))
    850         return b;
    851 
    852     n = k >> 5;
    853     k1 = b->k;
    854     n1 = n + b->wds + 1;
    855     for(i = b->maxwds; n1 > i; i <<= 1)
    856         k1++;
    857     b1 = Balloc(k1);
    858     if (b1 == NULL) {
    859         Bfree(b);
    860         return NULL;
    861     }
    862     x1 = b1->x;
    863     for(i = 0; i < n; i++)
    864         *x1++ = 0;
    865     x = b->x;
    866     xe = x + b->wds;
    867     if (k &= 0x1f) {
    868         k1 = 32 - k;
    869         z = 0;
    870         do {
    871             *x1++ = *x << k | z;
    872             z = *x++ >> k1;
    873         }
    874         while(x < xe);
    875         if ((*x1 = z))
    876             ++n1;
    877     }
    878     else do
    879              *x1++ = *x++;
    880         while(x < xe);
    881     b1->wds = n1 - 1;
    882     Bfree(b);
    883     return b1;
    884 }
    885 
    886 /* Do a three-way compare of a and b, returning -1 if a < b, 0 if a == b and
    887    1 if a > b.  Ignores signs of a and b. */
    888 
    889 static int
    890 cmp(Bigint *a, Bigint *b)
    891 {
    892     ULong *xa, *xa0, *xb, *xb0;
    893     int i, j;
    894 
    895     i = a->wds;
    896     j = b->wds;
    897 #ifdef DEBUG
    898     if (i > 1 && !a->x[i-1])
    899         Bug("cmp called with a->x[a->wds-1] == 0");
    900     if (j > 1 && !b->x[j-1])
    901         Bug("cmp called with b->x[b->wds-1] == 0");
    902 #endif
    903     if (i -= j)
    904         return i;
    905     xa0 = a->x;
    906     xa = xa0 + j;
    907     xb0 = b->x;
    908     xb = xb0 + j;
    909     for(;;) {
    910         if (*--xa != *--xb)
    911             return *xa < *xb ? -1 : 1;
    912         if (xa <= xa0)
    913             break;
    914     }
    915     return 0;
    916 }
    917 
    918 /* Take the difference of Bigints a and b, returning a new Bigint.  Returns
    919    NULL on failure.  The signs of a and b are ignored, but the sign of the
    920    result is set appropriately. */
    921 
    922 static Bigint *
    923 diff(Bigint *a, Bigint *b)
    924 {
    925     Bigint *c;
    926     int i, wa, wb;
    927     ULong *xa, *xae, *xb, *xbe, *xc;
    928 #ifdef ULLong
    929     ULLong borrow, y;
    930 #else
    931     ULong borrow, y;
    932     ULong z;
    933 #endif
    934 
    935     i = cmp(a,b);
    936     if (!i) {
    937         c = Balloc(0);
    938         if (c == NULL)
    939             return NULL;
    940         c->wds = 1;
    941         c->x[0] = 0;
    942         return c;
    943     }
    944     if (i < 0) {
    945         c = a;
    946         a = b;
    947         b = c;
    948         i = 1;
    949     }
    950     else
    951         i = 0;
    952     c = Balloc(a->k);
    953     if (c == NULL)
    954         return NULL;
    955     c->sign = i;
    956     wa = a->wds;
    957     xa = a->x;
    958     xae = xa + wa;
    959     wb = b->wds;
    960     xb = b->x;
    961     xbe = xb + wb;
    962     xc = c->x;
    963     borrow = 0;
    964 #ifdef ULLong
    965     do {
    966         y = (ULLong)*xa++ - *xb++ - borrow;
    967         borrow = y >> 32 & (ULong)1;
    968         *xc++ = (ULong)(y & FFFFFFFF);
    969     }
    970     while(xb < xbe);
    971     while(xa < xae) {
    972         y = *xa++ - borrow;
    973         borrow = y >> 32 & (ULong)1;
    974         *xc++ = (ULong)(y & FFFFFFFF);
    975     }
    976 #else
    977     do {
    978         y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
    979         borrow = (y & 0x10000) >> 16;
    980         z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
    981         borrow = (z & 0x10000) >> 16;
    982         Storeinc(xc, z, y);
    983     }
    984     while(xb < xbe);
    985     while(xa < xae) {
    986         y = (*xa & 0xffff) - borrow;
    987         borrow = (y & 0x10000) >> 16;
    988         z = (*xa++ >> 16) - borrow;
    989         borrow = (z & 0x10000) >> 16;
    990         Storeinc(xc, z, y);
    991     }
    992 #endif
    993     while(!*--xc)
    994         wa--;
    995     c->wds = wa;
    996     return c;
    997 }
    998 
    999 /* Given a positive normal double x, return the difference between x and the
   1000    next double up.  Doesn't give correct results for subnormals. */
   1001 
   1002 static double
   1003 ulp(U *x)
   1004 {
   1005     Long L;
   1006     U u;
   1007 
   1008     L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
   1009     word0(&u) = L;
   1010     word1(&u) = 0;
   1011     return dval(&u);
   1012 }
   1013 
   1014 /* Convert a Bigint to a double plus an exponent */
   1015 
   1016 static double
   1017 b2d(Bigint *a, int *e)
   1018 {
   1019     ULong *xa, *xa0, w, y, z;
   1020     int k;
   1021     U d;
   1022 
   1023     xa0 = a->x;
   1024     xa = xa0 + a->wds;
   1025     y = *--xa;
   1026 #ifdef DEBUG
   1027     if (!y) Bug("zero y in b2d");
   1028 #endif
   1029     k = hi0bits(y);
   1030     *e = 32 - k;
   1031     if (k < Ebits) {
   1032         word0(&d) = Exp_1 | y >> (Ebits - k);
   1033         w = xa > xa0 ? *--xa : 0;
   1034         word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
   1035         goto ret_d;
   1036     }
   1037     z = xa > xa0 ? *--xa : 0;
   1038     if (k -= Ebits) {
   1039         word0(&d) = Exp_1 | y << k | z >> (32 - k);
   1040         y = xa > xa0 ? *--xa : 0;
   1041         word1(&d) = z << k | y >> (32 - k);
   1042     }
   1043     else {
   1044         word0(&d) = Exp_1 | y;
   1045         word1(&d) = z;
   1046     }
   1047   ret_d:
   1048     return dval(&d);
   1049 }
   1050 
   1051 /* Convert a scaled double to a Bigint plus an exponent.  Similar to d2b,
   1052    except that it accepts the scale parameter used in _Py_dg_strtod (which
   1053    should be either 0 or 2*P), and the normalization for the return value is
   1054    different (see below).  On input, d should be finite and nonnegative, and d
   1055    / 2**scale should be exactly representable as an IEEE 754 double.
   1056 
   1057    Returns a Bigint b and an integer e such that
   1058 
   1059      dval(d) / 2**scale = b * 2**e.
   1060 
   1061    Unlike d2b, b is not necessarily odd: b and e are normalized so
   1062    that either 2**(P-1) <= b < 2**P and e >= Etiny, or b < 2**P
   1063    and e == Etiny.  This applies equally to an input of 0.0: in that
   1064    case the return values are b = 0 and e = Etiny.
   1065 
   1066    The above normalization ensures that for all possible inputs d,
   1067    2**e gives ulp(d/2**scale).
   1068 
   1069    Returns NULL on failure.
   1070 */
   1071 
   1072 static Bigint *
   1073 sd2b(U *d, int scale, int *e)
   1074 {
   1075     Bigint *b;
   1076 
   1077     b = Balloc(1);
   1078     if (b == NULL)
   1079         return NULL;
   1080 
   1081     /* First construct b and e assuming that scale == 0. */
   1082     b->wds = 2;
   1083     b->x[0] = word1(d);
   1084     b->x[1] = word0(d) & Frac_mask;
   1085     *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
   1086     if (*e < Etiny)
   1087         *e = Etiny;
   1088     else
   1089         b->x[1] |= Exp_msk1;
   1090 
   1091     /* Now adjust for scale, provided that b != 0. */
   1092     if (scale && (b->x[0] || b->x[1])) {
   1093         *e -= scale;
   1094         if (*e < Etiny) {
   1095             scale = Etiny - *e;
   1096             *e = Etiny;
   1097             /* We can't shift more than P-1 bits without shifting out a 1. */
   1098             assert(0 < scale && scale <= P - 1);
   1099             if (scale >= 32) {
   1100                 /* The bits shifted out should all be zero. */
   1101                 assert(b->x[0] == 0);
   1102                 b->x[0] = b->x[1];
   1103                 b->x[1] = 0;
   1104                 scale -= 32;
   1105             }
   1106             if (scale) {
   1107                 /* The bits shifted out should all be zero. */
   1108                 assert(b->x[0] << (32 - scale) == 0);
   1109                 b->x[0] = (b->x[0] >> scale) | (b->x[1] << (32 - scale));
   1110                 b->x[1] >>= scale;
   1111             }
   1112         }
   1113     }
   1114     /* Ensure b is normalized. */
   1115     if (!b->x[1])
   1116         b->wds = 1;
   1117 
   1118     return b;
   1119 }
   1120 
   1121 /* Convert a double to a Bigint plus an exponent.  Return NULL on failure.
   1122 
   1123    Given a finite nonzero double d, return an odd Bigint b and exponent *e
   1124    such that fabs(d) = b * 2**e.  On return, *bbits gives the number of
   1125    significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
   1126 
   1127    If d is zero, then b == 0, *e == -1010, *bbits = 0.
   1128  */
   1129 
   1130 static Bigint *
   1131 d2b(U *d, int *e, int *bits)
   1132 {
   1133     Bigint *b;
   1134     int de, k;
   1135     ULong *x, y, z;
   1136     int i;
   1137 
   1138     b = Balloc(1);
   1139     if (b == NULL)
   1140         return NULL;
   1141     x = b->x;
   1142 
   1143     z = word0(d) & Frac_mask;
   1144     word0(d) &= 0x7fffffff;   /* clear sign bit, which we ignore */
   1145     if ((de = (int)(word0(d) >> Exp_shift)))
   1146         z |= Exp_msk1;
   1147     if ((y = word1(d))) {
   1148         if ((k = lo0bits(&y))) {
   1149             x[0] = y | z << (32 - k);
   1150             z >>= k;
   1151         }
   1152         else
   1153             x[0] = y;
   1154         i =
   1155             b->wds = (x[1] = z) ? 2 : 1;
   1156     }
   1157     else {
   1158         k = lo0bits(&z);
   1159         x[0] = z;
   1160         i =
   1161             b->wds = 1;
   1162         k += 32;
   1163     }
   1164     if (de) {
   1165         *e = de - Bias - (P-1) + k;
   1166         *bits = P - k;
   1167     }
   1168     else {
   1169         *e = de - Bias - (P-1) + 1 + k;
   1170         *bits = 32*i - hi0bits(x[i-1]);
   1171     }
   1172     return b;
   1173 }
   1174 
   1175 /* Compute the ratio of two Bigints, as a double.  The result may have an
   1176    error of up to 2.5 ulps. */
   1177 
   1178 static double
   1179 ratio(Bigint *a, Bigint *b)
   1180 {
   1181     U da, db;
   1182     int k, ka, kb;
   1183 
   1184     dval(&da) = b2d(a, &ka);
   1185     dval(&db) = b2d(b, &kb);
   1186     k = ka - kb + 32*(a->wds - b->wds);
   1187     if (k > 0)
   1188         word0(&da) += k*Exp_msk1;
   1189     else {
   1190         k = -k;
   1191         word0(&db) += k*Exp_msk1;
   1192     }
   1193     return dval(&da) / dval(&db);
   1194 }
   1195 
   1196 static const double
   1197 tens[] = {
   1198     1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
   1199     1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
   1200     1e20, 1e21, 1e22
   1201 };
   1202 
   1203 static const double
   1204 bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
   1205 static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
   1206                                    9007199254740992.*9007199254740992.e-256
   1207                                    /* = 2^106 * 1e-256 */
   1208 };
   1209 /* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
   1210 /* flag unnecessarily.  It leads to a song and dance at the end of strtod. */
   1211 #define Scale_Bit 0x10
   1212 #define n_bigtens 5
   1213 
   1214 #define ULbits 32
   1215 #define kshift 5
   1216 #define kmask 31
   1217 
   1218 
   1219 static int
   1220 dshift(Bigint *b, int p2)
   1221 {
   1222     int rv = hi0bits(b->x[b->wds-1]) - 4;
   1223     if (p2 > 0)
   1224         rv -= p2;
   1225     return rv & kmask;
   1226 }
   1227 
   1228 /* special case of Bigint division.  The quotient is always in the range 0 <=
   1229    quotient < 10, and on entry the divisor S is normalized so that its top 4
   1230    bits (28--31) are zero and bit 27 is set. */
   1231 
   1232 static int
   1233 quorem(Bigint *b, Bigint *S)
   1234 {
   1235     int n;
   1236     ULong *bx, *bxe, q, *sx, *sxe;
   1237 #ifdef ULLong
   1238     ULLong borrow, carry, y, ys;
   1239 #else
   1240     ULong borrow, carry, y, ys;
   1241     ULong si, z, zs;
   1242 #endif
   1243 
   1244     n = S->wds;
   1245 #ifdef DEBUG
   1246     /*debug*/ if (b->wds > n)
   1247         /*debug*/       Bug("oversize b in quorem");
   1248 #endif
   1249     if (b->wds < n)
   1250         return 0;
   1251     sx = S->x;
   1252     sxe = sx + --n;
   1253     bx = b->x;
   1254     bxe = bx + n;
   1255     q = *bxe / (*sxe + 1);      /* ensure q <= true quotient */
   1256 #ifdef DEBUG
   1257     /*debug*/ if (q > 9)
   1258         /*debug*/       Bug("oversized quotient in quorem");
   1259 #endif
   1260     if (q) {
   1261         borrow = 0;
   1262         carry = 0;
   1263         do {
   1264 #ifdef ULLong
   1265             ys = *sx++ * (ULLong)q + carry;
   1266             carry = ys >> 32;
   1267             y = *bx - (ys & FFFFFFFF) - borrow;
   1268             borrow = y >> 32 & (ULong)1;
   1269             *bx++ = (ULong)(y & FFFFFFFF);
   1270 #else
   1271             si = *sx++;
   1272             ys = (si & 0xffff) * q + carry;
   1273             zs = (si >> 16) * q + (ys >> 16);
   1274             carry = zs >> 16;
   1275             y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
   1276             borrow = (y & 0x10000) >> 16;
   1277             z = (*bx >> 16) - (zs & 0xffff) - borrow;
   1278             borrow = (z & 0x10000) >> 16;
   1279             Storeinc(bx, z, y);
   1280 #endif
   1281         }
   1282         while(sx <= sxe);
   1283         if (!*bxe) {
   1284             bx = b->x;
   1285             while(--bxe > bx && !*bxe)
   1286                 --n;
   1287             b->wds = n;
   1288         }
   1289     }
   1290     if (cmp(b, S) >= 0) {
   1291         q++;
   1292         borrow = 0;
   1293         carry = 0;
   1294         bx = b->x;
   1295         sx = S->x;
   1296         do {
   1297 #ifdef ULLong
   1298             ys = *sx++ + carry;
   1299             carry = ys >> 32;
   1300             y = *bx - (ys & FFFFFFFF) - borrow;
   1301             borrow = y >> 32 & (ULong)1;
   1302             *bx++ = (ULong)(y & FFFFFFFF);
   1303 #else
   1304             si = *sx++;
   1305             ys = (si & 0xffff) + carry;
   1306             zs = (si >> 16) + (ys >> 16);
   1307             carry = zs >> 16;
   1308             y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
   1309             borrow = (y & 0x10000) >> 16;
   1310             z = (*bx >> 16) - (zs & 0xffff) - borrow;
   1311             borrow = (z & 0x10000) >> 16;
   1312             Storeinc(bx, z, y);
   1313 #endif
   1314         }
   1315         while(sx <= sxe);
   1316         bx = b->x;
   1317         bxe = bx + n;
   1318         if (!*bxe) {
   1319             while(--bxe > bx && !*bxe)
   1320                 --n;
   1321             b->wds = n;
   1322         }
   1323     }
   1324     return q;
   1325 }
   1326 
   1327 /* sulp(x) is a version of ulp(x) that takes bc.scale into account.
   1328 
   1329    Assuming that x is finite and nonnegative (positive zero is fine
   1330    here) and x / 2^bc.scale is exactly representable as a double,
   1331    sulp(x) is equivalent to 2^bc.scale * ulp(x / 2^bc.scale). */
   1332 
   1333 static double
   1334 sulp(U *x, BCinfo *bc)
   1335 {
   1336     U u;
   1337 
   1338     if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
   1339         /* rv/2^bc->scale is subnormal */
   1340         word0(&u) = (P+2)*Exp_msk1;
   1341         word1(&u) = 0;
   1342         return u.d;
   1343     }
   1344     else {
   1345         assert(word0(x) || word1(x)); /* x != 0.0 */
   1346         return ulp(x);
   1347     }
   1348 }
   1349 
   1350 /* The bigcomp function handles some hard cases for strtod, for inputs
   1351    with more than STRTOD_DIGLIM digits.  It's called once an initial
   1352    estimate for the double corresponding to the input string has
   1353    already been obtained by the code in _Py_dg_strtod.
   1354 
   1355    The bigcomp function is only called after _Py_dg_strtod has found a
   1356    double value rv such that either rv or rv + 1ulp represents the
   1357    correctly rounded value corresponding to the original string.  It
   1358    determines which of these two values is the correct one by
   1359    computing the decimal digits of rv + 0.5ulp and comparing them with
   1360    the corresponding digits of s0.
   1361 
   1362    In the following, write dv for the absolute value of the number represented
   1363    by the input string.
   1364 
   1365    Inputs:
   1366 
   1367      s0 points to the first significant digit of the input string.
   1368 
   1369      rv is a (possibly scaled) estimate for the closest double value to the
   1370         value represented by the original input to _Py_dg_strtod.  If
   1371         bc->scale is nonzero, then rv/2^(bc->scale) is the approximation to
   1372         the input value.
   1373 
   1374      bc is a struct containing information gathered during the parsing and
   1375         estimation steps of _Py_dg_strtod.  Description of fields follows:
   1376 
   1377         bc->e0 gives the exponent of the input value, such that dv = (integer
   1378            given by the bd->nd digits of s0) * 10**e0
   1379 
   1380         bc->nd gives the total number of significant digits of s0.  It will
   1381            be at least 1.
   1382 
   1383         bc->nd0 gives the number of significant digits of s0 before the
   1384            decimal separator.  If there's no decimal separator, bc->nd0 ==
   1385            bc->nd.
   1386 
   1387         bc->scale is the value used to scale rv to avoid doing arithmetic with
   1388            subnormal values.  It's either 0 or 2*P (=106).
   1389 
   1390    Outputs:
   1391 
   1392      On successful exit, rv/2^(bc->scale) is the closest double to dv.
   1393 
   1394      Returns 0 on success, -1 on failure (e.g., due to a failed malloc call). */
   1395 
   1396 static int
   1397 bigcomp(U *rv, const char *s0, BCinfo *bc)
   1398 {
   1399     Bigint *b, *d;
   1400     int b2, d2, dd, i, nd, nd0, odd, p2, p5;
   1401 
   1402     nd = bc->nd;
   1403     nd0 = bc->nd0;
   1404     p5 = nd + bc->e0;
   1405     b = sd2b(rv, bc->scale, &p2);
   1406     if (b == NULL)
   1407         return -1;
   1408 
   1409     /* record whether the lsb of rv/2^(bc->scale) is odd:  in the exact halfway
   1410        case, this is used for round to even. */
   1411     odd = b->x[0] & 1;
   1412 
   1413     /* left shift b by 1 bit and or a 1 into the least significant bit;
   1414        this gives us b * 2**p2 = rv/2^(bc->scale) + 0.5 ulp. */
   1415     b = lshift(b, 1);
   1416     if (b == NULL)
   1417         return -1;
   1418     b->x[0] |= 1;
   1419     p2--;
   1420 
   1421     p2 -= p5;
   1422     d = i2b(1);
   1423     if (d == NULL) {
   1424         Bfree(b);
   1425         return -1;
   1426     }
   1427     /* Arrange for convenient computation of quotients:
   1428      * shift left if necessary so divisor has 4 leading 0 bits.
   1429      */
   1430     if (p5 > 0) {
   1431         d = pow5mult(d, p5);
   1432         if (d == NULL) {
   1433             Bfree(b);
   1434             return -1;
   1435         }
   1436     }
   1437     else if (p5 < 0) {
   1438         b = pow5mult(b, -p5);
   1439         if (b == NULL) {
   1440             Bfree(d);
   1441             return -1;
   1442         }
   1443     }
   1444     if (p2 > 0) {
   1445         b2 = p2;
   1446         d2 = 0;
   1447     }
   1448     else {
   1449         b2 = 0;
   1450         d2 = -p2;
   1451     }
   1452     i = dshift(d, d2);
   1453     if ((b2 += i) > 0) {
   1454         b = lshift(b, b2);
   1455         if (b == NULL) {
   1456             Bfree(d);
   1457             return -1;
   1458         }
   1459     }
   1460     if ((d2 += i) > 0) {
   1461         d = lshift(d, d2);
   1462         if (d == NULL) {
   1463             Bfree(b);
   1464             return -1;
   1465         }
   1466     }
   1467 
   1468     /* Compare s0 with b/d: set dd to -1, 0, or 1 according as s0 < b/d, s0 ==
   1469      * b/d, or s0 > b/d.  Here the digits of s0 are thought of as representing
   1470      * a number in the range [0.1, 1). */
   1471     if (cmp(b, d) >= 0)
   1472         /* b/d >= 1 */
   1473         dd = -1;
   1474     else {
   1475         i = 0;
   1476         for(;;) {
   1477             b = multadd(b, 10, 0);
   1478             if (b == NULL) {
   1479                 Bfree(d);
   1480                 return -1;
   1481             }
   1482             dd = s0[i < nd0 ? i : i+1] - '0' - quorem(b, d);
   1483             i++;
   1484 
   1485             if (dd)
   1486                 break;
   1487             if (!b->x[0] && b->wds == 1) {
   1488                 /* b/d == 0 */
   1489                 dd = i < nd;
   1490                 break;
   1491             }
   1492             if (!(i < nd)) {
   1493                 /* b/d != 0, but digits of s0 exhausted */
   1494                 dd = -1;
   1495                 break;
   1496             }
   1497         }
   1498     }
   1499     Bfree(b);
   1500     Bfree(d);
   1501     if (dd > 0 || (dd == 0 && odd))
   1502         dval(rv) += sulp(rv, bc);
   1503     return 0;
   1504 }
   1505 
   1506 double
   1507 _Py_dg_strtod(const char *s00, char **se)
   1508 {
   1509     int bb2, bb5, bbe, bd2, bd5, bs2, c, dsign, e, e1, error;
   1510     int esign, i, j, k, lz, nd, nd0, odd, sign;
   1511     const char *s, *s0, *s1;
   1512     double aadj, aadj1;
   1513     U aadj2, adj, rv, rv0;
   1514     ULong y, z, abs_exp;
   1515     Long L;
   1516     BCinfo bc;
   1517     Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
   1518     size_t ndigits, fraclen;
   1519 
   1520     dval(&rv) = 0.;
   1521 
   1522     /* Start parsing. */
   1523     c = *(s = s00);
   1524 
   1525     /* Parse optional sign, if present. */
   1526     sign = 0;
   1527     switch (c) {
   1528     case '-':
   1529         sign = 1;
   1530         /* no break */
   1531     case '+':
   1532         c = *++s;
   1533     }
   1534 
   1535     /* Skip leading zeros: lz is true iff there were leading zeros. */
   1536     s1 = s;
   1537     while (c == '0')
   1538         c = *++s;
   1539     lz = s != s1;
   1540 
   1541     /* Point s0 at the first nonzero digit (if any).  fraclen will be the
   1542        number of digits between the decimal point and the end of the
   1543        digit string.  ndigits will be the total number of digits ignoring
   1544        leading zeros. */
   1545     s0 = s1 = s;
   1546     while ('0' <= c && c <= '9')
   1547         c = *++s;
   1548     ndigits = s - s1;
   1549     fraclen = 0;
   1550 
   1551     /* Parse decimal point and following digits. */
   1552     if (c == '.') {
   1553         c = *++s;
   1554         if (!ndigits) {
   1555             s1 = s;
   1556             while (c == '0')
   1557                 c = *++s;
   1558             lz = lz || s != s1;
   1559             fraclen += (s - s1);
   1560             s0 = s;
   1561         }
   1562         s1 = s;
   1563         while ('0' <= c && c <= '9')
   1564             c = *++s;
   1565         ndigits += s - s1;
   1566         fraclen += s - s1;
   1567     }
   1568 
   1569     /* Now lz is true if and only if there were leading zero digits, and
   1570        ndigits gives the total number of digits ignoring leading zeros.  A
   1571        valid input must have at least one digit. */
   1572     if (!ndigits && !lz) {
   1573         if (se)
   1574             *se = (char *)s00;
   1575         goto parse_error;
   1576     }
   1577 
   1578     /* Range check ndigits and fraclen to make sure that they, and values
   1579        computed with them, can safely fit in an int. */
   1580     if (ndigits > MAX_DIGITS || fraclen > MAX_DIGITS) {
   1581         if (se)
   1582             *se = (char *)s00;
   1583         goto parse_error;
   1584     }
   1585     nd = (int)ndigits;
   1586     nd0 = (int)ndigits - (int)fraclen;
   1587 
   1588     /* Parse exponent. */
   1589     e = 0;
   1590     if (c == 'e' || c == 'E') {
   1591         s00 = s;
   1592         c = *++s;
   1593 
   1594         /* Exponent sign. */
   1595         esign = 0;
   1596         switch (c) {
   1597         case '-':
   1598             esign = 1;
   1599             /* no break */
   1600         case '+':
   1601             c = *++s;
   1602         }
   1603 
   1604         /* Skip zeros.  lz is true iff there are leading zeros. */
   1605         s1 = s;
   1606         while (c == '0')
   1607             c = *++s;
   1608         lz = s != s1;
   1609 
   1610         /* Get absolute value of the exponent. */
   1611         s1 = s;
   1612         abs_exp = 0;
   1613         while ('0' <= c && c <= '9') {
   1614             abs_exp = 10*abs_exp + (c - '0');
   1615             c = *++s;
   1616         }
   1617 
   1618         /* abs_exp will be correct modulo 2**32.  But 10**9 < 2**32, so if
   1619            there are at most 9 significant exponent digits then overflow is
   1620            impossible. */
   1621         if (s - s1 > 9 || abs_exp > MAX_ABS_EXP)
   1622             e = (int)MAX_ABS_EXP;
   1623         else
   1624             e = (int)abs_exp;
   1625         if (esign)
   1626             e = -e;
   1627 
   1628         /* A valid exponent must have at least one digit. */
   1629         if (s == s1 && !lz)
   1630             s = s00;
   1631     }
   1632 
   1633     /* Adjust exponent to take into account position of the point. */
   1634     e -= nd - nd0;
   1635     if (nd0 <= 0)
   1636         nd0 = nd;
   1637 
   1638     /* Finished parsing.  Set se to indicate how far we parsed */
   1639     if (se)
   1640         *se = (char *)s;
   1641 
   1642     /* If all digits were zero, exit with return value +-0.0.  Otherwise,
   1643        strip trailing zeros: scan back until we hit a nonzero digit. */
   1644     if (!nd)
   1645         goto ret;
   1646     for (i = nd; i > 0; ) {
   1647         --i;
   1648         if (s0[i < nd0 ? i : i+1] != '0') {
   1649             ++i;
   1650             break;
   1651         }
   1652     }
   1653     e += nd - i;
   1654     nd = i;
   1655     if (nd0 > nd)
   1656         nd0 = nd;
   1657 
   1658     /* Summary of parsing results.  After parsing, and dealing with zero
   1659      * inputs, we have values s0, nd0, nd, e, sign, where:
   1660      *
   1661      *  - s0 points to the first significant digit of the input string
   1662      *
   1663      *  - nd is the total number of significant digits (here, and
   1664      *    below, 'significant digits' means the set of digits of the
   1665      *    significand of the input that remain after ignoring leading
   1666      *    and trailing zeros).
   1667      *
   1668      *  - nd0 indicates the position of the decimal point, if present; it
   1669      *    satisfies 1 <= nd0 <= nd.  The nd significant digits are in
   1670      *    s0[0:nd0] and s0[nd0+1:nd+1] using the usual Python half-open slice
   1671      *    notation.  (If nd0 < nd, then s0[nd0] contains a '.'  character; if
   1672      *    nd0 == nd, then s0[nd0] could be any non-digit character.)
   1673      *
   1674      *  - e is the adjusted exponent: the absolute value of the number
   1675      *    represented by the original input string is n * 10**e, where
   1676      *    n is the integer represented by the concatenation of
   1677      *    s0[0:nd0] and s0[nd0+1:nd+1]
   1678      *
   1679      *  - sign gives the sign of the input:  1 for negative, 0 for positive
   1680      *
   1681      *  - the first and last significant digits are nonzero
   1682      */
   1683 
   1684     /* put first DBL_DIG+1 digits into integer y and z.
   1685      *
   1686      *  - y contains the value represented by the first min(9, nd)
   1687      *    significant digits
   1688      *
   1689      *  - if nd > 9, z contains the value represented by significant digits
   1690      *    with indices in [9, min(16, nd)).  So y * 10**(min(16, nd) - 9) + z
   1691      *    gives the value represented by the first min(16, nd) sig. digits.
   1692      */
   1693 
   1694     bc.e0 = e1 = e;
   1695     y = z = 0;
   1696     for (i = 0; i < nd; i++) {
   1697         if (i < 9)
   1698             y = 10*y + s0[i < nd0 ? i : i+1] - '0';
   1699         else if (i < DBL_DIG+1)
   1700             z = 10*z + s0[i < nd0 ? i : i+1] - '0';
   1701         else
   1702             break;
   1703     }
   1704 
   1705     k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
   1706     dval(&rv) = y;
   1707     if (k > 9) {
   1708         dval(&rv) = tens[k - 9] * dval(&rv) + z;
   1709     }
   1710     bd0 = 0;
   1711     if (nd <= DBL_DIG
   1712         && Flt_Rounds == 1
   1713         ) {
   1714         if (!e)
   1715             goto ret;
   1716         if (e > 0) {
   1717             if (e <= Ten_pmax) {
   1718                 dval(&rv) *= tens[e];
   1719                 goto ret;
   1720             }
   1721             i = DBL_DIG - nd;
   1722             if (e <= Ten_pmax + i) {
   1723                 /* A fancier test would sometimes let us do
   1724                  * this for larger i values.
   1725                  */
   1726                 e -= i;
   1727                 dval(&rv) *= tens[i];
   1728                 dval(&rv) *= tens[e];
   1729                 goto ret;
   1730             }
   1731         }
   1732         else if (e >= -Ten_pmax) {
   1733             dval(&rv) /= tens[-e];
   1734             goto ret;
   1735         }
   1736     }
   1737     e1 += nd - k;
   1738 
   1739     bc.scale = 0;
   1740 
   1741     /* Get starting approximation = rv * 10**e1 */
   1742 
   1743     if (e1 > 0) {
   1744         if ((i = e1 & 15))
   1745             dval(&rv) *= tens[i];
   1746         if (e1 &= ~15) {
   1747             if (e1 > DBL_MAX_10_EXP)
   1748                 goto ovfl;
   1749             e1 >>= 4;
   1750             for(j = 0; e1 > 1; j++, e1 >>= 1)
   1751                 if (e1 & 1)
   1752                     dval(&rv) *= bigtens[j];
   1753             /* The last multiplication could overflow. */
   1754             word0(&rv) -= P*Exp_msk1;
   1755             dval(&rv) *= bigtens[j];
   1756             if ((z = word0(&rv) & Exp_mask)
   1757                 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
   1758                 goto ovfl;
   1759             if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
   1760                 /* set to largest number */
   1761                 /* (Can't trust DBL_MAX) */
   1762                 word0(&rv) = Big0;
   1763                 word1(&rv) = Big1;
   1764             }
   1765             else
   1766                 word0(&rv) += P*Exp_msk1;
   1767         }
   1768     }
   1769     else if (e1 < 0) {
   1770         /* The input decimal value lies in [10**e1, 10**(e1+16)).
   1771 
   1772            If e1 <= -512, underflow immediately.
   1773            If e1 <= -256, set bc.scale to 2*P.
   1774 
   1775            So for input value < 1e-256, bc.scale is always set;
   1776            for input value >= 1e-240, bc.scale is never set.
   1777            For input values in [1e-256, 1e-240), bc.scale may or may
   1778            not be set. */
   1779 
   1780         e1 = -e1;
   1781         if ((i = e1 & 15))
   1782             dval(&rv) /= tens[i];
   1783         if (e1 >>= 4) {
   1784             if (e1 >= 1 << n_bigtens)
   1785                 goto undfl;
   1786             if (e1 & Scale_Bit)
   1787                 bc.scale = 2*P;
   1788             for(j = 0; e1 > 0; j++, e1 >>= 1)
   1789                 if (e1 & 1)
   1790                     dval(&rv) *= tinytens[j];
   1791             if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
   1792                                             >> Exp_shift)) > 0) {
   1793                 /* scaled rv is denormal; clear j low bits */
   1794                 if (j >= 32) {
   1795                     word1(&rv) = 0;
   1796                     if (j >= 53)
   1797                         word0(&rv) = (P+2)*Exp_msk1;
   1798                     else
   1799                         word0(&rv) &= 0xffffffff << (j-32);
   1800                 }
   1801                 else
   1802                     word1(&rv) &= 0xffffffff << j;
   1803             }
   1804             if (!dval(&rv))
   1805                 goto undfl;
   1806         }
   1807     }
   1808 
   1809     /* Now the hard part -- adjusting rv to the correct value.*/
   1810 
   1811     /* Put digits into bd: true value = bd * 10^e */
   1812 
   1813     bc.nd = nd;
   1814     bc.nd0 = nd0;       /* Only needed if nd > STRTOD_DIGLIM, but done here */
   1815                         /* to silence an erroneous warning about bc.nd0 */
   1816                         /* possibly not being initialized. */
   1817     if (nd > STRTOD_DIGLIM) {
   1818         /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
   1819         /* minimum number of decimal digits to distinguish double values */
   1820         /* in IEEE arithmetic. */
   1821 
   1822         /* Truncate input to 18 significant digits, then discard any trailing
   1823            zeros on the result by updating nd, nd0, e and y suitably. (There's
   1824            no need to update z; it's not reused beyond this point.) */
   1825         for (i = 18; i > 0; ) {
   1826             /* scan back until we hit a nonzero digit.  significant digit 'i'
   1827             is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
   1828             --i;
   1829             if (s0[i < nd0 ? i : i+1] != '0') {
   1830                 ++i;
   1831                 break;
   1832             }
   1833         }
   1834         e += nd - i;
   1835         nd = i;
   1836         if (nd0 > nd)
   1837             nd0 = nd;
   1838         if (nd < 9) { /* must recompute y */
   1839             y = 0;
   1840             for(i = 0; i < nd0; ++i)
   1841                 y = 10*y + s0[i] - '0';
   1842             for(; i < nd; ++i)
   1843                 y = 10*y + s0[i+1] - '0';
   1844         }
   1845     }
   1846     bd0 = s2b(s0, nd0, nd, y);
   1847     if (bd0 == NULL)
   1848         goto failed_malloc;
   1849 
   1850     /* Notation for the comments below.  Write:
   1851 
   1852          - dv for the absolute value of the number represented by the original
   1853            decimal input string.
   1854 
   1855          - if we've truncated dv, write tdv for the truncated value.
   1856            Otherwise, set tdv == dv.
   1857 
   1858          - srv for the quantity rv/2^bc.scale; so srv is the current binary
   1859            approximation to tdv (and dv).  It should be exactly representable
   1860            in an IEEE 754 double.
   1861     */
   1862 
   1863     for(;;) {
   1864 
   1865         /* This is the main correction loop for _Py_dg_strtod.
   1866 
   1867            We've got a decimal value tdv, and a floating-point approximation
   1868            srv=rv/2^bc.scale to tdv.  The aim is to determine whether srv is
   1869            close enough (i.e., within 0.5 ulps) to tdv, and to compute a new
   1870            approximation if not.
   1871 
   1872            To determine whether srv is close enough to tdv, compute integers
   1873            bd, bb and bs proportional to tdv, srv and 0.5 ulp(srv)
   1874            respectively, and then use integer arithmetic to determine whether
   1875            |tdv - srv| is less than, equal to, or greater than 0.5 ulp(srv).
   1876         */
   1877 
   1878         bd = Balloc(bd0->k);
   1879         if (bd == NULL) {
   1880             Bfree(bd0);
   1881             goto failed_malloc;
   1882         }
   1883         Bcopy(bd, bd0);
   1884         bb = sd2b(&rv, bc.scale, &bbe);   /* srv = bb * 2^bbe */
   1885         if (bb == NULL) {
   1886             Bfree(bd);
   1887             Bfree(bd0);
   1888             goto failed_malloc;
   1889         }
   1890         /* Record whether lsb of bb is odd, in case we need this
   1891            for the round-to-even step later. */
   1892         odd = bb->x[0] & 1;
   1893 
   1894         /* tdv = bd * 10**e;  srv = bb * 2**bbe */
   1895         bs = i2b(1);
   1896         if (bs == NULL) {
   1897             Bfree(bb);
   1898             Bfree(bd);
   1899             Bfree(bd0);
   1900             goto failed_malloc;
   1901         }
   1902 
   1903         if (e >= 0) {
   1904             bb2 = bb5 = 0;
   1905             bd2 = bd5 = e;
   1906         }
   1907         else {
   1908             bb2 = bb5 = -e;
   1909             bd2 = bd5 = 0;
   1910         }
   1911         if (bbe >= 0)
   1912             bb2 += bbe;
   1913         else
   1914             bd2 -= bbe;
   1915         bs2 = bb2;
   1916         bb2++;
   1917         bd2++;
   1918 
   1919         /* At this stage bd5 - bb5 == e == bd2 - bb2 + bbe, bb2 - bs2 == 1,
   1920            and bs == 1, so:
   1921 
   1922               tdv == bd * 10**e = bd * 2**(bbe - bb2 + bd2) * 5**(bd5 - bb5)
   1923               srv == bb * 2**bbe = bb * 2**(bbe - bb2 + bb2)
   1924               0.5 ulp(srv) == 2**(bbe-1) = bs * 2**(bbe - bb2 + bs2)
   1925 
   1926            It follows that:
   1927 
   1928               M * tdv = bd * 2**bd2 * 5**bd5
   1929               M * srv = bb * 2**bb2 * 5**bb5
   1930               M * 0.5 ulp(srv) = bs * 2**bs2 * 5**bb5
   1931 
   1932            for some constant M.  (Actually, M == 2**(bb2 - bbe) * 5**bb5, but
   1933            this fact is not needed below.)
   1934         */
   1935 
   1936         /* Remove factor of 2**i, where i = min(bb2, bd2, bs2). */
   1937         i = bb2 < bd2 ? bb2 : bd2;
   1938         if (i > bs2)
   1939             i = bs2;
   1940         if (i > 0) {
   1941             bb2 -= i;
   1942             bd2 -= i;
   1943             bs2 -= i;
   1944         }
   1945 
   1946         /* Scale bb, bd, bs by the appropriate powers of 2 and 5. */
   1947         if (bb5 > 0) {
   1948             bs = pow5mult(bs, bb5);
   1949             if (bs == NULL) {
   1950                 Bfree(bb);
   1951                 Bfree(bd);
   1952                 Bfree(bd0);
   1953                 goto failed_malloc;
   1954             }
   1955             bb1 = mult(bs, bb);
   1956             Bfree(bb);
   1957             bb = bb1;
   1958             if (bb == NULL) {
   1959                 Bfree(bs);
   1960                 Bfree(bd);
   1961                 Bfree(bd0);
   1962                 goto failed_malloc;
   1963             }
   1964         }
   1965         if (bb2 > 0) {
   1966             bb = lshift(bb, bb2);
   1967             if (bb == NULL) {
   1968                 Bfree(bs);
   1969                 Bfree(bd);
   1970                 Bfree(bd0);
   1971                 goto failed_malloc;
   1972             }
   1973         }
   1974         if (bd5 > 0) {
   1975             bd = pow5mult(bd, bd5);
   1976             if (bd == NULL) {
   1977                 Bfree(bb);
   1978                 Bfree(bs);
   1979                 Bfree(bd0);
   1980                 goto failed_malloc;
   1981             }
   1982         }
   1983         if (bd2 > 0) {
   1984             bd = lshift(bd, bd2);
   1985             if (bd == NULL) {
   1986                 Bfree(bb);
   1987                 Bfree(bs);
   1988                 Bfree(bd0);
   1989                 goto failed_malloc;
   1990             }
   1991         }
   1992         if (bs2 > 0) {
   1993             bs = lshift(bs, bs2);
   1994             if (bs == NULL) {
   1995                 Bfree(bb);
   1996                 Bfree(bd);
   1997                 Bfree(bd0);
   1998                 goto failed_malloc;
   1999             }
   2000         }
   2001 
   2002         /* Now bd, bb and bs are scaled versions of tdv, srv and 0.5 ulp(srv),
   2003            respectively.  Compute the difference |tdv - srv|, and compare
   2004            with 0.5 ulp(srv). */
   2005 
   2006         delta = diff(bb, bd);
   2007         if (delta == NULL) {
   2008             Bfree(bb);
   2009             Bfree(bs);
   2010             Bfree(bd);
   2011             Bfree(bd0);
   2012             goto failed_malloc;
   2013         }
   2014         dsign = delta->sign;
   2015         delta->sign = 0;
   2016         i = cmp(delta, bs);
   2017         if (bc.nd > nd && i <= 0) {
   2018             if (dsign)
   2019                 break;  /* Must use bigcomp(). */
   2020 
   2021             /* Here rv overestimates the truncated decimal value by at most
   2022                0.5 ulp(rv).  Hence rv either overestimates the true decimal
   2023                value by <= 0.5 ulp(rv), or underestimates it by some small
   2024                amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
   2025                the true decimal value, so it's possible to exit.
   2026 
   2027                Exception: if scaled rv is a normal exact power of 2, but not
   2028                DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
   2029                next double, so the correctly rounded result is either rv - 0.5
   2030                ulp(rv) or rv; in this case, use bigcomp to distinguish. */
   2031 
   2032             if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
   2033                 /* rv can't be 0, since it's an overestimate for some
   2034                    nonzero value.  So rv is a normal power of 2. */
   2035                 j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
   2036                 /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
   2037                    rv / 2^bc.scale >= 2^-1021. */
   2038                 if (j - bc.scale >= 2) {
   2039                     dval(&rv) -= 0.5 * sulp(&rv, &bc);
   2040                     break; /* Use bigcomp. */
   2041                 }
   2042             }
   2043 
   2044             {
   2045                 bc.nd = nd;
   2046                 i = -1; /* Discarded digits make delta smaller. */
   2047             }
   2048         }
   2049 
   2050         if (i < 0) {
   2051             /* Error is less than half an ulp -- check for
   2052              * special case of mantissa a power of two.
   2053              */
   2054             if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
   2055                 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
   2056                 ) {
   2057                 break;
   2058             }
   2059             if (!delta->x[0] && delta->wds <= 1) {
   2060                 /* exact result */
   2061                 break;
   2062             }
   2063             delta = lshift(delta,Log2P);
   2064             if (delta == NULL) {
   2065                 Bfree(bb);
   2066                 Bfree(bs);
   2067                 Bfree(bd);
   2068                 Bfree(bd0);
   2069                 goto failed_malloc;
   2070             }
   2071             if (cmp(delta, bs) > 0)
   2072                 goto drop_down;
   2073             break;
   2074         }
   2075         if (i == 0) {
   2076             /* exactly half-way between */
   2077             if (dsign) {
   2078                 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
   2079                     &&  word1(&rv) == (
   2080                         (bc.scale &&
   2081                          (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
   2082                         (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
   2083                         0xffffffff)) {
   2084                     /*boundary case -- increment exponent*/
   2085                     word0(&rv) = (word0(&rv) & Exp_mask)
   2086                         + Exp_msk1
   2087                         ;
   2088                     word1(&rv) = 0;
   2089                     dsign = 0;
   2090                     break;
   2091                 }
   2092             }
   2093             else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
   2094               drop_down:
   2095                 /* boundary case -- decrement exponent */
   2096                 if (bc.scale) {
   2097                     L = word0(&rv) & Exp_mask;
   2098                     if (L <= (2*P+1)*Exp_msk1) {
   2099                         if (L > (P+2)*Exp_msk1)
   2100                             /* round even ==> */
   2101                             /* accept rv */
   2102                             break;
   2103                         /* rv = smallest denormal */
   2104                         if (bc.nd > nd)
   2105                             break;
   2106                         goto undfl;
   2107                     }
   2108                 }
   2109                 L = (word0(&rv) & Exp_mask) - Exp_msk1;
   2110                 word0(&rv) = L | Bndry_mask1;
   2111                 word1(&rv) = 0xffffffff;
   2112                 break;
   2113             }
   2114             if (!odd)
   2115                 break;
   2116             if (dsign)
   2117                 dval(&rv) += sulp(&rv, &bc);
   2118             else {
   2119                 dval(&rv) -= sulp(&rv, &bc);
   2120                 if (!dval(&rv)) {
   2121                     if (bc.nd >nd)
   2122                         break;
   2123                     goto undfl;
   2124                 }
   2125             }
   2126             dsign = 1 - dsign;
   2127             break;
   2128         }
   2129         if ((aadj = ratio(delta, bs)) <= 2.) {
   2130             if (dsign)
   2131                 aadj = aadj1 = 1.;
   2132             else if (word1(&rv) || word0(&rv) & Bndry_mask) {
   2133                 if (word1(&rv) == Tiny1 && !word0(&rv)) {
   2134                     if (bc.nd >nd)
   2135                         break;
   2136                     goto undfl;
   2137                 }
   2138                 aadj = 1.;
   2139                 aadj1 = -1.;
   2140             }
   2141             else {
   2142                 /* special case -- power of FLT_RADIX to be */
   2143                 /* rounded down... */
   2144 
   2145                 if (aadj < 2./FLT_RADIX)
   2146                     aadj = 1./FLT_RADIX;
   2147                 else
   2148                     aadj *= 0.5;
   2149                 aadj1 = -aadj;
   2150             }
   2151         }
   2152         else {
   2153             aadj *= 0.5;
   2154             aadj1 = dsign ? aadj : -aadj;
   2155             if (Flt_Rounds == 0)
   2156                 aadj1 += 0.5;
   2157         }
   2158         y = word0(&rv) & Exp_mask;
   2159 
   2160         /* Check for overflow */
   2161 
   2162         if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
   2163             dval(&rv0) = dval(&rv);
   2164             word0(&rv) -= P*Exp_msk1;
   2165             adj.d = aadj1 * ulp(&rv);
   2166             dval(&rv) += adj.d;
   2167             if ((word0(&rv) & Exp_mask) >=
   2168                 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
   2169                 if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
   2170                     Bfree(bb);
   2171                     Bfree(bd);
   2172                     Bfree(bs);
   2173                     Bfree(bd0);
   2174                     Bfree(delta);
   2175                     goto ovfl;
   2176                 }
   2177                 word0(&rv) = Big0;
   2178                 word1(&rv) = Big1;
   2179                 goto cont;
   2180             }
   2181             else
   2182                 word0(&rv) += P*Exp_msk1;
   2183         }
   2184         else {
   2185             if (bc.scale && y <= 2*P*Exp_msk1) {
   2186                 if (aadj <= 0x7fffffff) {
   2187                     if ((z = (ULong)aadj) <= 0)
   2188                         z = 1;
   2189                     aadj = z;
   2190                     aadj1 = dsign ? aadj : -aadj;
   2191                 }
   2192                 dval(&aadj2) = aadj1;
   2193                 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
   2194                 aadj1 = dval(&aadj2);
   2195             }
   2196             adj.d = aadj1 * ulp(&rv);
   2197             dval(&rv) += adj.d;
   2198         }
   2199         z = word0(&rv) & Exp_mask;
   2200         if (bc.nd == nd) {
   2201             if (!bc.scale)
   2202                 if (y == z) {
   2203                     /* Can we stop now? */
   2204                     L = (Long)aadj;
   2205                     aadj -= L;
   2206                     /* The tolerances below are conservative. */
   2207                     if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
   2208                         if (aadj < .4999999 || aadj > .5000001)
   2209                             break;
   2210                     }
   2211                     else if (aadj < .4999999/FLT_RADIX)
   2212                         break;
   2213                 }
   2214         }
   2215       cont:
   2216         Bfree(bb);
   2217         Bfree(bd);
   2218         Bfree(bs);
   2219         Bfree(delta);
   2220     }
   2221     Bfree(bb);
   2222     Bfree(bd);
   2223     Bfree(bs);
   2224     Bfree(bd0);
   2225     Bfree(delta);
   2226     if (bc.nd > nd) {
   2227         error = bigcomp(&rv, s0, &bc);
   2228         if (error)
   2229             goto failed_malloc;
   2230     }
   2231 
   2232     if (bc.scale) {
   2233         word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
   2234         word1(&rv0) = 0;
   2235         dval(&rv) *= dval(&rv0);
   2236     }
   2237 
   2238   ret:
   2239     return sign ? -dval(&rv) : dval(&rv);
   2240 
   2241   parse_error:
   2242     return 0.0;
   2243 
   2244   failed_malloc:
   2245     errno = ENOMEM;
   2246     return -1.0;
   2247 
   2248   undfl:
   2249     return sign ? -0.0 : 0.0;
   2250 
   2251   ovfl:
   2252     errno = ERANGE;
   2253     /* Can't trust HUGE_VAL */
   2254     word0(&rv) = Exp_mask;
   2255     word1(&rv) = 0;
   2256     return sign ? -dval(&rv) : dval(&rv);
   2257 
   2258 }
   2259 
   2260 static char *
   2261 rv_alloc(int i)
   2262 {
   2263     int j, k, *r;
   2264 
   2265     j = sizeof(ULong);
   2266     for(k = 0;
   2267         sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
   2268         j <<= 1)
   2269         k++;
   2270     r = (int*)Balloc(k);
   2271     if (r == NULL)
   2272         return NULL;
   2273     *r = k;
   2274     return (char *)(r+1);
   2275 }
   2276 
   2277 static char *
   2278 nrv_alloc(char *s, char **rve, int n)
   2279 {
   2280     char *rv, *t;
   2281 
   2282     rv = rv_alloc(n);
   2283     if (rv == NULL)
   2284         return NULL;
   2285     t = rv;
   2286     while((*t = *s++)) t++;
   2287     if (rve)
   2288         *rve = t;
   2289     return rv;
   2290 }
   2291 
   2292 /* freedtoa(s) must be used to free values s returned by dtoa
   2293  * when MULTIPLE_THREADS is #defined.  It should be used in all cases,
   2294  * but for consistency with earlier versions of dtoa, it is optional
   2295  * when MULTIPLE_THREADS is not defined.
   2296  */
   2297 
   2298 void
   2299 _Py_dg_freedtoa(char *s)
   2300 {
   2301     Bigint *b = (Bigint *)((int *)s - 1);
   2302     b->maxwds = 1 << (b->k = *(int*)b);
   2303     Bfree(b);
   2304 }
   2305 
   2306 /* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
   2307  *
   2308  * Inspired by "How to Print Floating-Point Numbers Accurately" by
   2309  * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
   2310  *
   2311  * Modifications:
   2312  *      1. Rather than iterating, we use a simple numeric overestimate
   2313  *         to determine k = floor(log10(d)).  We scale relevant
   2314  *         quantities using O(log2(k)) rather than O(k) multiplications.
   2315  *      2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
   2316  *         try to generate digits strictly left to right.  Instead, we
   2317  *         compute with fewer bits and propagate the carry if necessary
   2318  *         when rounding the final digit up.  This is often faster.
   2319  *      3. Under the assumption that input will be rounded nearest,
   2320  *         mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
   2321  *         That is, we allow equality in stopping tests when the
   2322  *         round-nearest rule will give the same floating-point value
   2323  *         as would satisfaction of the stopping test with strict
   2324  *         inequality.
   2325  *      4. We remove common factors of powers of 2 from relevant
   2326  *         quantities.
   2327  *      5. When converting floating-point integers less than 1e16,
   2328  *         we use floating-point arithmetic rather than resorting
   2329  *         to multiple-precision integers.
   2330  *      6. When asked to produce fewer than 15 digits, we first try
   2331  *         to get by with floating-point arithmetic; we resort to
   2332  *         multiple-precision integer arithmetic only if we cannot
   2333  *         guarantee that the floating-point calculation has given
   2334  *         the correctly rounded result.  For k requested digits and
   2335  *         "uniformly" distributed input, the probability is
   2336  *         something like 10^(k-15) that we must resort to the Long
   2337  *         calculation.
   2338  */
   2339 
   2340 /* Additional notes (METD): (1) returns NULL on failure.  (2) to avoid memory
   2341    leakage, a successful call to _Py_dg_dtoa should always be matched by a
   2342    call to _Py_dg_freedtoa. */
   2343 
   2344 char *
   2345 _Py_dg_dtoa(double dd, int mode, int ndigits,
   2346             int *decpt, int *sign, char **rve)
   2347 {
   2348     /*  Arguments ndigits, decpt, sign are similar to those
   2349         of ecvt and fcvt; trailing zeros are suppressed from
   2350         the returned string.  If not null, *rve is set to point
   2351         to the end of the return value.  If d is +-Infinity or NaN,
   2352         then *decpt is set to 9999.
   2353 
   2354         mode:
   2355         0 ==> shortest string that yields d when read in
   2356         and rounded to nearest.
   2357         1 ==> like 0, but with Steele & White stopping rule;
   2358         e.g. with IEEE P754 arithmetic , mode 0 gives
   2359         1e23 whereas mode 1 gives 9.999999999999999e22.
   2360         2 ==> max(1,ndigits) significant digits.  This gives a
   2361         return value similar to that of ecvt, except
   2362         that trailing zeros are suppressed.
   2363         3 ==> through ndigits past the decimal point.  This
   2364         gives a return value similar to that from fcvt,
   2365         except that trailing zeros are suppressed, and
   2366         ndigits can be negative.
   2367         4,5 ==> similar to 2 and 3, respectively, but (in
   2368         round-nearest mode) with the tests of mode 0 to
   2369         possibly return a shorter string that rounds to d.
   2370         With IEEE arithmetic and compilation with
   2371         -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
   2372         as modes 2 and 3 when FLT_ROUNDS != 1.
   2373         6-9 ==> Debugging modes similar to mode - 4:  don't try
   2374         fast floating-point estimate (if applicable).
   2375 
   2376         Values of mode other than 0-9 are treated as mode 0.
   2377 
   2378         Sufficient space is allocated to the return value
   2379         to hold the suppressed trailing zeros.
   2380     */
   2381 
   2382     int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
   2383         j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
   2384         spec_case, try_quick;
   2385     Long L;
   2386     int denorm;
   2387     ULong x;
   2388     Bigint *b, *b1, *delta, *mlo, *mhi, *S;
   2389     U d2, eps, u;
   2390     double ds;
   2391     char *s, *s0;
   2392 
   2393     /* set pointers to NULL, to silence gcc compiler warnings and make
   2394        cleanup easier on error */
   2395     mlo = mhi = S = 0;
   2396     s0 = 0;
   2397 
   2398     u.d = dd;
   2399     if (word0(&u) & Sign_bit) {
   2400         /* set sign for everything, including 0's and NaNs */
   2401         *sign = 1;
   2402         word0(&u) &= ~Sign_bit; /* clear sign bit */
   2403     }
   2404     else
   2405         *sign = 0;
   2406 
   2407     /* quick return for Infinities, NaNs and zeros */
   2408     if ((word0(&u) & Exp_mask) == Exp_mask)
   2409     {
   2410         /* Infinity or NaN */
   2411         *decpt = 9999;
   2412         if (!word1(&u) && !(word0(&u) & 0xfffff))
   2413             return nrv_alloc("Infinity", rve, 8);
   2414         return nrv_alloc("NaN", rve, 3);
   2415     }
   2416     if (!dval(&u)) {
   2417         *decpt = 1;
   2418         return nrv_alloc("0", rve, 1);
   2419     }
   2420 
   2421     /* compute k = floor(log10(d)).  The computation may leave k
   2422        one too large, but should never leave k too small. */
   2423     b = d2b(&u, &be, &bbits);
   2424     if (b == NULL)
   2425         goto failed_malloc;
   2426     if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
   2427         dval(&d2) = dval(&u);
   2428         word0(&d2) &= Frac_mask1;
   2429         word0(&d2) |= Exp_11;
   2430 
   2431         /* log(x)       ~=~ log(1.5) + (x-1.5)/1.5
   2432          * log10(x)      =  log(x) / log(10)
   2433          *              ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
   2434          * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
   2435          *
   2436          * This suggests computing an approximation k to log10(d) by
   2437          *
   2438          * k = (i - Bias)*0.301029995663981
   2439          *      + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
   2440          *
   2441          * We want k to be too large rather than too small.
   2442          * The error in the first-order Taylor series approximation
   2443          * is in our favor, so we just round up the constant enough
   2444          * to compensate for any error in the multiplication of
   2445          * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
   2446          * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
   2447          * adding 1e-13 to the constant term more than suffices.
   2448          * Hence we adjust the constant term to 0.1760912590558.
   2449          * (We could get a more accurate k by invoking log10,
   2450          *  but this is probably not worthwhile.)
   2451          */
   2452 
   2453         i -= Bias;
   2454         denorm = 0;
   2455     }
   2456     else {
   2457         /* d is denormalized */
   2458 
   2459         i = bbits + be + (Bias + (P-1) - 1);
   2460         x = i > 32  ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
   2461             : word1(&u) << (32 - i);
   2462         dval(&d2) = x;
   2463         word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
   2464         i -= (Bias + (P-1) - 1) + 1;
   2465         denorm = 1;
   2466     }
   2467     ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
   2468         i*0.301029995663981;
   2469     k = (int)ds;
   2470     if (ds < 0. && ds != k)
   2471         k--;    /* want k = floor(ds) */
   2472     k_check = 1;
   2473     if (k >= 0 && k <= Ten_pmax) {
   2474         if (dval(&u) < tens[k])
   2475             k--;
   2476         k_check = 0;
   2477     }
   2478     j = bbits - i - 1;
   2479     if (j >= 0) {
   2480         b2 = 0;
   2481         s2 = j;
   2482     }
   2483     else {
   2484         b2 = -j;
   2485         s2 = 0;
   2486     }
   2487     if (k >= 0) {
   2488         b5 = 0;
   2489         s5 = k;
   2490         s2 += k;
   2491     }
   2492     else {
   2493         b2 -= k;
   2494         b5 = -k;
   2495         s5 = 0;
   2496     }
   2497     if (mode < 0 || mode > 9)
   2498         mode = 0;
   2499 
   2500     try_quick = 1;
   2501 
   2502     if (mode > 5) {
   2503         mode -= 4;
   2504         try_quick = 0;
   2505     }
   2506     leftright = 1;
   2507     ilim = ilim1 = -1;  /* Values for cases 0 and 1; done here to */
   2508     /* silence erroneous "gcc -Wall" warning. */
   2509     switch(mode) {
   2510     case 0:
   2511     case 1:
   2512         i = 18;
   2513         ndigits = 0;
   2514         break;
   2515     case 2:
   2516         leftright = 0;
   2517         /* no break */
   2518     case 4:
   2519         if (ndigits <= 0)
   2520             ndigits = 1;
   2521         ilim = ilim1 = i = ndigits;
   2522         break;
   2523     case 3:
   2524         leftright = 0;
   2525         /* no break */
   2526     case 5:
   2527         i = ndigits + k + 1;
   2528         ilim = i;
   2529         ilim1 = i - 1;
   2530         if (i <= 0)
   2531             i = 1;
   2532     }
   2533     s0 = rv_alloc(i);
   2534     if (s0 == NULL)
   2535         goto failed_malloc;
   2536     s = s0;
   2537 
   2538 
   2539     if (ilim >= 0 && ilim <= Quick_max && try_quick) {
   2540 
   2541         /* Try to get by with floating-point arithmetic. */
   2542 
   2543         i = 0;
   2544         dval(&d2) = dval(&u);
   2545         k0 = k;
   2546         ilim0 = ilim;
   2547         ieps = 2; /* conservative */
   2548         if (k > 0) {
   2549             ds = tens[k&0xf];
   2550             j = k >> 4;
   2551             if (j & Bletch) {
   2552                 /* prevent overflows */
   2553                 j &= Bletch - 1;
   2554                 dval(&u) /= bigtens[n_bigtens-1];
   2555                 ieps++;
   2556             }
   2557             for(; j; j >>= 1, i++)
   2558                 if (j & 1) {
   2559                     ieps++;
   2560                     ds *= bigtens[i];
   2561                 }
   2562             dval(&u) /= ds;
   2563         }
   2564         else if ((j1 = -k)) {
   2565             dval(&u) *= tens[j1 & 0xf];
   2566             for(j = j1 >> 4; j; j >>= 1, i++)
   2567                 if (j & 1) {
   2568                     ieps++;
   2569                     dval(&u) *= bigtens[i];
   2570                 }
   2571         }
   2572         if (k_check && dval(&u) < 1. && ilim > 0) {
   2573             if (ilim1 <= 0)
   2574                 goto fast_failed;
   2575             ilim = ilim1;
   2576             k--;
   2577             dval(&u) *= 10.;
   2578             ieps++;
   2579         }
   2580         dval(&eps) = ieps*dval(&u) + 7.;
   2581         word0(&eps) -= (P-1)*Exp_msk1;
   2582         if (ilim == 0) {
   2583             S = mhi = 0;
   2584             dval(&u) -= 5.;
   2585             if (dval(&u) > dval(&eps))
   2586                 goto one_digit;
   2587             if (dval(&u) < -dval(&eps))
   2588                 goto no_digits;
   2589             goto fast_failed;
   2590         }
   2591         if (leftright) {
   2592             /* Use Steele & White method of only
   2593              * generating digits needed.
   2594              */
   2595             dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
   2596             for(i = 0;;) {
   2597                 L = (Long)dval(&u);
   2598                 dval(&u) -= L;
   2599                 *s++ = '0' + (int)L;
   2600                 if (dval(&u) < dval(&eps))
   2601                     goto ret1;
   2602                 if (1. - dval(&u) < dval(&eps))
   2603                     goto bump_up;
   2604                 if (++i >= ilim)
   2605                     break;
   2606                 dval(&eps) *= 10.;
   2607                 dval(&u) *= 10.;
   2608             }
   2609         }
   2610         else {
   2611             /* Generate ilim digits, then fix them up. */
   2612             dval(&eps) *= tens[ilim-1];
   2613             for(i = 1;; i++, dval(&u) *= 10.) {
   2614                 L = (Long)(dval(&u));
   2615                 if (!(dval(&u) -= L))
   2616                     ilim = i;
   2617                 *s++ = '0' + (int)L;
   2618                 if (i == ilim) {
   2619                     if (dval(&u) > 0.5 + dval(&eps))
   2620                         goto bump_up;
   2621                     else if (dval(&u) < 0.5 - dval(&eps)) {
   2622                         while(*--s == '0');
   2623                         s++;
   2624                         goto ret1;
   2625                     }
   2626                     break;
   2627                 }
   2628             }
   2629         }
   2630       fast_failed:
   2631         s = s0;
   2632         dval(&u) = dval(&d2);
   2633         k = k0;
   2634         ilim = ilim0;
   2635     }
   2636 
   2637     /* Do we have a "small" integer? */
   2638 
   2639     if (be >= 0 && k <= Int_max) {
   2640         /* Yes. */
   2641         ds = tens[k];
   2642         if (ndigits < 0 && ilim <= 0) {
   2643             S = mhi = 0;
   2644             if (ilim < 0 || dval(&u) <= 5*ds)
   2645                 goto no_digits;
   2646             goto one_digit;
   2647         }
   2648         for(i = 1;; i++, dval(&u) *= 10.) {
   2649             L = (Long)(dval(&u) / ds);
   2650             dval(&u) -= L*ds;
   2651             *s++ = '0' + (int)L;
   2652             if (!dval(&u)) {
   2653                 break;
   2654             }
   2655             if (i == ilim) {
   2656                 dval(&u) += dval(&u);
   2657                 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
   2658                   bump_up:
   2659                     while(*--s == '9')
   2660                         if (s == s0) {
   2661                             k++;
   2662                             *s = '0';
   2663                             break;
   2664                         }
   2665                     ++*s++;
   2666                 }
   2667                 break;
   2668             }
   2669         }
   2670         goto ret1;
   2671     }
   2672 
   2673     m2 = b2;
   2674     m5 = b5;
   2675     if (leftright) {
   2676         i =
   2677             denorm ? be + (Bias + (P-1) - 1 + 1) :
   2678             1 + P - bbits;
   2679         b2 += i;
   2680         s2 += i;
   2681         mhi = i2b(1);
   2682         if (mhi == NULL)
   2683             goto failed_malloc;
   2684     }
   2685     if (m2 > 0 && s2 > 0) {
   2686         i = m2 < s2 ? m2 : s2;
   2687         b2 -= i;
   2688         m2 -= i;
   2689         s2 -= i;
   2690     }
   2691     if (b5 > 0) {
   2692         if (leftright) {
   2693             if (m5 > 0) {
   2694                 mhi = pow5mult(mhi, m5);
   2695                 if (mhi == NULL)
   2696                     goto failed_malloc;
   2697                 b1 = mult(mhi, b);
   2698                 Bfree(b);
   2699                 b = b1;
   2700                 if (b == NULL)
   2701                     goto failed_malloc;
   2702             }
   2703             if ((j = b5 - m5)) {
   2704                 b = pow5mult(b, j);
   2705                 if (b == NULL)
   2706                     goto failed_malloc;
   2707             }
   2708         }
   2709         else {
   2710             b = pow5mult(b, b5);
   2711             if (b == NULL)
   2712                 goto failed_malloc;
   2713         }
   2714     }
   2715     S = i2b(1);
   2716     if (S == NULL)
   2717         goto failed_malloc;
   2718     if (s5 > 0) {
   2719         S = pow5mult(S, s5);
   2720         if (S == NULL)
   2721             goto failed_malloc;
   2722     }
   2723 
   2724     /* Check for special case that d is a normalized power of 2. */
   2725 
   2726     spec_case = 0;
   2727     if ((mode < 2 || leftright)
   2728         ) {
   2729         if (!word1(&u) && !(word0(&u) & Bndry_mask)
   2730             && word0(&u) & (Exp_mask & ~Exp_msk1)
   2731             ) {
   2732             /* The special case */
   2733             b2 += Log2P;
   2734             s2 += Log2P;
   2735             spec_case = 1;
   2736         }
   2737     }
   2738 
   2739     /* Arrange for convenient computation of quotients:
   2740      * shift left if necessary so divisor has 4 leading 0 bits.
   2741      *
   2742      * Perhaps we should just compute leading 28 bits of S once
   2743      * and for all and pass them and a shift to quorem, so it
   2744      * can do shifts and ors to compute the numerator for q.
   2745      */
   2746 #define iInc 28
   2747     i = dshift(S, s2);
   2748     b2 += i;
   2749     m2 += i;
   2750     s2 += i;
   2751     if (b2 > 0) {
   2752         b = lshift(b, b2);
   2753         if (b == NULL)
   2754             goto failed_malloc;
   2755     }
   2756     if (s2 > 0) {
   2757         S = lshift(S, s2);
   2758         if (S == NULL)
   2759             goto failed_malloc;
   2760     }
   2761     if (k_check) {
   2762         if (cmp(b,S) < 0) {
   2763             k--;
   2764             b = multadd(b, 10, 0);      /* we botched the k estimate */
   2765             if (b == NULL)
   2766                 goto failed_malloc;
   2767             if (leftright) {
   2768                 mhi = multadd(mhi, 10, 0);
   2769                 if (mhi == NULL)
   2770                     goto failed_malloc;
   2771             }
   2772             ilim = ilim1;
   2773         }
   2774     }
   2775     if (ilim <= 0 && (mode == 3 || mode == 5)) {
   2776         if (ilim < 0) {
   2777             /* no digits, fcvt style */
   2778           no_digits:
   2779             k = -1 - ndigits;
   2780             goto ret;
   2781         }
   2782         else {
   2783             S = multadd(S, 5, 0);
   2784             if (S == NULL)
   2785                 goto failed_malloc;
   2786             if (cmp(b, S) <= 0)
   2787                 goto no_digits;
   2788         }
   2789       one_digit:
   2790         *s++ = '1';
   2791         k++;
   2792         goto ret;
   2793     }
   2794     if (leftright) {
   2795         if (m2 > 0) {
   2796             mhi = lshift(mhi, m2);
   2797             if (mhi == NULL)
   2798                 goto failed_malloc;
   2799         }
   2800 
   2801         /* Compute mlo -- check for special case
   2802          * that d is a normalized power of 2.
   2803          */
   2804 
   2805         mlo = mhi;
   2806         if (spec_case) {
   2807             mhi = Balloc(mhi->k);
   2808             if (mhi == NULL)
   2809                 goto failed_malloc;
   2810             Bcopy(mhi, mlo);
   2811             mhi = lshift(mhi, Log2P);
   2812             if (mhi == NULL)
   2813                 goto failed_malloc;
   2814         }
   2815 
   2816         for(i = 1;;i++) {
   2817             dig = quorem(b,S) + '0';
   2818             /* Do we yet have the shortest decimal string
   2819              * that will round to d?
   2820              */
   2821             j = cmp(b, mlo);
   2822             delta = diff(S, mhi);
   2823             if (delta == NULL)
   2824                 goto failed_malloc;
   2825             j1 = delta->sign ? 1 : cmp(b, delta);
   2826             Bfree(delta);
   2827             if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
   2828                 ) {
   2829                 if (dig == '9')
   2830                     goto round_9_up;
   2831                 if (j > 0)
   2832                     dig++;
   2833                 *s++ = dig;
   2834                 goto ret;
   2835             }
   2836             if (j < 0 || (j == 0 && mode != 1
   2837                           && !(word1(&u) & 1)
   2838                     )) {
   2839                 if (!b->x[0] && b->wds <= 1) {
   2840                     goto accept_dig;
   2841                 }
   2842                 if (j1 > 0) {
   2843                     b = lshift(b, 1);
   2844                     if (b == NULL)
   2845                         goto failed_malloc;
   2846                     j1 = cmp(b, S);
   2847                     if ((j1 > 0 || (j1 == 0 && dig & 1))
   2848                         && dig++ == '9')
   2849                         goto round_9_up;
   2850                 }
   2851               accept_dig:
   2852                 *s++ = dig;
   2853                 goto ret;
   2854             }
   2855             if (j1 > 0) {
   2856                 if (dig == '9') { /* possible if i == 1 */
   2857                   round_9_up:
   2858                     *s++ = '9';
   2859                     goto roundoff;
   2860                 }
   2861                 *s++ = dig + 1;
   2862                 goto ret;
   2863             }
   2864             *s++ = dig;
   2865             if (i == ilim)
   2866                 break;
   2867             b = multadd(b, 10, 0);
   2868             if (b == NULL)
   2869                 goto failed_malloc;
   2870             if (mlo == mhi) {
   2871                 mlo = mhi = multadd(mhi, 10, 0);
   2872                 if (mlo == NULL)
   2873                     goto failed_malloc;
   2874             }
   2875             else {
   2876                 mlo = multadd(mlo, 10, 0);
   2877                 if (mlo == NULL)
   2878                     goto failed_malloc;
   2879                 mhi = multadd(mhi, 10, 0);
   2880                 if (mhi == NULL)
   2881                     goto failed_malloc;
   2882             }
   2883         }
   2884     }
   2885     else
   2886         for(i = 1;; i++) {
   2887             *s++ = dig = quorem(b,S) + '0';
   2888             if (!b->x[0] && b->wds <= 1) {
   2889                 goto ret;
   2890             }
   2891             if (i >= ilim)
   2892                 break;
   2893             b = multadd(b, 10, 0);
   2894             if (b == NULL)
   2895                 goto failed_malloc;
   2896         }
   2897 
   2898     /* Round off last digit */
   2899 
   2900     b = lshift(b, 1);
   2901     if (b == NULL)
   2902         goto failed_malloc;
   2903     j = cmp(b, S);
   2904     if (j > 0 || (j == 0 && dig & 1)) {
   2905       roundoff:
   2906         while(*--s == '9')
   2907             if (s == s0) {
   2908                 k++;
   2909                 *s++ = '1';
   2910                 goto ret;
   2911             }
   2912         ++*s++;
   2913     }
   2914     else {
   2915         while(*--s == '0');
   2916         s++;
   2917     }
   2918   ret:
   2919     Bfree(S);
   2920     if (mhi) {
   2921         if (mlo && mlo != mhi)
   2922             Bfree(mlo);
   2923         Bfree(mhi);
   2924     }
   2925   ret1:
   2926     Bfree(b);
   2927     *s = 0;
   2928     *decpt = k + 1;
   2929     if (rve)
   2930         *rve = s;
   2931     return s0;
   2932   failed_malloc:
   2933     if (S)
   2934         Bfree(S);
   2935     if (mlo && mlo != mhi)
   2936         Bfree(mlo);
   2937     if (mhi)
   2938         Bfree(mhi);
   2939     if (b)
   2940         Bfree(b);
   2941     if (s0)
   2942         _Py_dg_freedtoa(s0);
   2943     return NULL;
   2944 }
   2945 #ifdef __cplusplus
   2946 }
   2947 #endif
   2948 
   2949 #endif  /* PY_NO_SHORT_FLOAT_REPR */
   2950