Python-2.7.3/Python/dtoa.c

Location Tool Test ID Function Issue
/builddir/build/BUILD/Python-2.7.3/Python/dtoa.c:2058:21 clang-analyzer Value stored to 'dsign' is never read
/builddir/build/BUILD/Python-2.7.3/Python/dtoa.c:2058:21 clang-analyzer Value stored to 'dsign' is never read
/builddir/build/BUILD/Python-2.7.3/Python/dtoa.c:2095:13 clang-analyzer Value stored to 'dsign' is never read
/builddir/build/BUILD/Python-2.7.3/Python/dtoa.c:2095:13 clang-analyzer Value stored to 'dsign' is never read
   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 19999U
 208 #endif
 209 
 210 /* The following definition of Storeinc is appropriate for MIPS processors.
 211  * An alternative that might be better on some machines is
 212  * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
 213  */
 214 #if defined(IEEE_8087)
 215 #define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b,  \
 216                          ((unsigned short *)a)[0] = (unsigned short)c, a++)
 217 #else
 218 #define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b,  \
 219                          ((unsigned short *)a)[1] = (unsigned short)c, a++)
 220 #endif
 221 
 222 /* #define P DBL_MANT_DIG */
 223 /* Ten_pmax = floor(P*log(2)/log(5)) */
 224 /* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
 225 /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
 226 /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
 227 
 228 #define Exp_shift  20
 229 #define Exp_shift1 20
 230 #define Exp_msk1    0x100000
 231 #define Exp_msk11   0x100000
 232 #define Exp_mask  0x7ff00000
 233 #define P 53
 234 #define Nbits 53
 235 #define Bias 1023
 236 #define Emax 1023
 237 #define Emin (-1022)
 238 #define Etiny (-1074)  /* smallest denormal is 2**Etiny */
 239 #define Exp_1  0x3ff00000
 240 #define Exp_11 0x3ff00000
 241 #define Ebits 11
 242 #define Frac_mask  0xfffff
 243 #define Frac_mask1 0xfffff
 244 #define Ten_pmax 22
 245 #define Bletch 0x10
 246 #define Bndry_mask  0xfffff
 247 #define Bndry_mask1 0xfffff
 248 #define Sign_bit 0x80000000
 249 #define Log2P 1
 250 #define Tiny0 0
 251 #define Tiny1 1
 252 #define Quick_max 14
 253 #define Int_max 14
 254 
 255 #ifndef Flt_Rounds
 256 #ifdef FLT_ROUNDS
 257 #define Flt_Rounds FLT_ROUNDS
 258 #else
 259 #define Flt_Rounds 1
 260 #endif
 261 #endif /*Flt_Rounds*/
 262 
 263 #define Rounding Flt_Rounds
 264 
 265 #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
 266 #define Big1 0xffffffff
 267 
 268 /* struct BCinfo is used to pass information from _Py_dg_strtod to bigcomp */
 269 
 270 typedef struct BCinfo BCinfo;
 271 struct
 272 BCinfo {
 273     int e0, nd, nd0, scale;
 274 };
 275 
 276 #define FFFFFFFF 0xffffffffUL
 277 
 278 #define Kmax 7
 279 
 280 /* struct Bigint is used to represent arbitrary-precision integers.  These
 281    integers are stored in sign-magnitude format, with the magnitude stored as
 282    an array of base 2**32 digits.  Bigints are always normalized: if x is a
 283    Bigint then x->wds >= 1, and either x->wds == 1 or x[wds-1] is nonzero.
 284 
 285    The Bigint fields are as follows:
 286 
 287      - next is a header used by Balloc and Bfree to keep track of lists
 288          of freed Bigints;  it's also used for the linked list of
 289          powers of 5 of the form 5**2**i used by pow5mult.
 290      - k indicates which pool this Bigint was allocated from
 291      - maxwds is the maximum number of words space was allocated for
 292        (usually maxwds == 2**k)
 293      - sign is 1 for negative Bigints, 0 for positive.  The sign is unused
 294        (ignored on inputs, set to 0 on outputs) in almost all operations
 295        involving Bigints: a notable exception is the diff function, which
 296        ignores signs on inputs but sets the sign of the output correctly.
 297      - wds is the actual number of significant words
 298      - x contains the vector of words (digits) for this Bigint, from least
 299        significant (x[0]) to most significant (x[wds-1]).
 300 */
 301 
 302 struct
 303 Bigint {
 304     struct Bigint *next;
 305     int k, maxwds, sign, wds;
 306     ULong x[1];
 307 };
 308 
 309 typedef struct Bigint Bigint;
 310 
 311 #ifndef Py_USING_MEMORY_DEBUGGER
 312 
 313 /* Memory management: memory is allocated from, and returned to, Kmax+1 pools
 314    of memory, where pool k (0 <= k <= Kmax) is for Bigints b with b->maxwds ==
 315    1 << k.  These pools are maintained as linked lists, with freelist[k]
 316    pointing to the head of the list for pool k.
 317 
 318    On allocation, if there's no free slot in the appropriate pool, MALLOC is
 319    called to get more memory.  This memory is not returned to the system until
 320    Python quits.  There's also a private memory pool that's allocated from
 321    in preference to using MALLOC.
 322 
 323    For Bigints with more than (1 << Kmax) digits (which implies at least 1233
 324    decimal digits), memory is directly allocated using MALLOC, and freed using
 325    FREE.
 326 
 327    XXX: it would be easy to bypass this memory-management system and
 328    translate each call to Balloc into a call to PyMem_Malloc, and each
 329    Bfree to PyMem_Free.  Investigate whether this has any significant
 330    performance on impact. */
 331 
 332 static Bigint *freelist[Kmax+1];
 333 
 334 /* Allocate space for a Bigint with up to 1<<k digits */
 335 
 336 static Bigint *
 337 Balloc(int k)
 338 {
 339     int x;
 340     Bigint *rv;
 341     unsigned int len;
 342 
 343     if (k <= Kmax && (rv = freelist[k]))
 344         freelist[k] = rv->next;
 345     else {
 346         x = 1 << k;
 347         len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
 348             /sizeof(double);
 349         if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
 350             rv = (Bigint*)pmem_next;
 351             pmem_next += len;
 352         }
 353         else {
 354             rv = (Bigint*)MALLOC(len*sizeof(double));
 355             if (rv == NULL)
 356                 return NULL;
 357         }
 358         rv->k = k;
 359         rv->maxwds = x;
 360     }
 361     rv->sign = rv->wds = 0;
 362     return rv;
 363 }
 364 
 365 /* Free a Bigint allocated with Balloc */
 366 
 367 static void
 368 Bfree(Bigint *v)
 369 {
 370     if (v) {
 371         if (v->k > Kmax)
 372             FREE((void*)v);
 373         else {
 374             v->next = freelist[v->k];
 375             freelist[v->k] = v;
 376         }
 377     }
 378 }
 379 
 380 #else
 381 
 382 /* Alternative versions of Balloc and Bfree that use PyMem_Malloc and
 383    PyMem_Free directly in place of the custom memory allocation scheme above.
 384    These are provided for the benefit of memory debugging tools like
 385    Valgrind. */
 386 
 387 /* Allocate space for a Bigint with up to 1<<k digits */
 388 
 389 static Bigint *
 390 Balloc(int k)
 391 {
 392     int x;
 393     Bigint *rv;
 394     unsigned int len;
 395 
 396     x = 1 << k;
 397     len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
 398         /sizeof(double);
 399 
 400     rv = (Bigint*)MALLOC(len*sizeof(double));
 401     if (rv == NULL)
 402         return NULL;
 403 
 404     rv->k = k;
 405     rv->maxwds = x;
 406     rv->sign = rv->wds = 0;
 407     return rv;
 408 }
 409 
 410 /* Free a Bigint allocated with Balloc */
 411 
 412 static void
 413 Bfree(Bigint *v)
 414 {
 415     if (v) {
 416         FREE((void*)v);
 417     }
 418 }
 419 
 420 #endif /* Py_USING_MEMORY_DEBUGGER */
 421 
 422 #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign,   \
 423                           y->wds*sizeof(Long) + 2*sizeof(int))
 424 
 425 /* Multiply a Bigint b by m and add a.  Either modifies b in place and returns
 426    a pointer to the modified b, or Bfrees b and returns a pointer to a copy.
 427    On failure, return NULL.  In this case, b will have been already freed. */
 428 
 429 static Bigint *
 430 multadd(Bigint *b, int m, int a)       /* multiply by m and add a */
 431 {
 432     int i, wds;
 433 #ifdef ULLong
 434     ULong *x;
 435     ULLong carry, y;
 436 #else
 437     ULong carry, *x, y;
 438     ULong xi, z;
 439 #endif
 440     Bigint *b1;
 441 
 442     wds = b->wds;
 443     x = b->x;
 444     i = 0;
 445     carry = a;
 446     do {
 447 #ifdef ULLong
 448         y = *x * (ULLong)m + carry;
 449         carry = y >> 32;
 450         *x++ = (ULong)(y & FFFFFFFF);
 451 #else
 452         xi = *x;
 453         y = (xi & 0xffff) * m + carry;
 454         z = (xi >> 16) * m + (y >> 16);
 455         carry = z >> 16;
 456         *x++ = (z << 16) + (y & 0xffff);
 457 #endif
 458     }
 459     while(++i < wds);
 460     if (carry) {
 461         if (wds >= b->maxwds) {
 462             b1 = Balloc(b->k+1);
 463             if (b1 == NULL){
 464                 Bfree(b);
 465                 return NULL;
 466             }
 467             Bcopy(b1, b);
 468             Bfree(b);
 469             b = b1;
 470         }
 471         b->x[wds++] = (ULong)carry;
 472         b->wds = wds;
 473     }
 474     return b;
 475 }
 476 
 477 /* convert a string s containing nd decimal digits (possibly containing a
 478    decimal separator at position nd0, which is ignored) to a Bigint.  This
 479    function carries on where the parsing code in _Py_dg_strtod leaves off: on
 480    entry, y9 contains the result of converting the first 9 digits.  Returns
 481    NULL on failure. */
 482 
 483 static Bigint *
 484 s2b(const char *s, int nd0, int nd, ULong y9)
 485 {
 486     Bigint *b;
 487     int i, k;
 488     Long x, y;
 489 
 490     x = (nd + 8) / 9;
 491     for(k = 0, y = 1; x > y; y <<= 1, k++) ;
 492     b = Balloc(k);
 493     if (b == NULL)
 494         return NULL;
 495     b->x[0] = y9;
 496     b->wds = 1;
 497 
 498     if (nd <= 9)
 499       return b;
 500 
 501     s += 9;
 502     for (i = 9; i < nd0; i++) {
 503         b = multadd(b, 10, *s++ - '0');
 504         if (b == NULL)
 505             return NULL;
 506     }
 507     s++;
 508     for(; i < nd; i++) {
 509         b = multadd(b, 10, *s++ - '0');
 510         if (b == NULL)
 511             return NULL;
 512     }
 513     return b;
 514 }
 515 
 516 /* count leading 0 bits in the 32-bit integer x. */
 517 
 518 static int
 519 hi0bits(ULong x)
 520 {
 521     int k = 0;
 522 
 523     if (!(x & 0xffff0000)) {
 524         k = 16;
 525         x <<= 16;
 526     }
 527     if (!(x & 0xff000000)) {
 528         k += 8;
 529         x <<= 8;
 530     }
 531     if (!(x & 0xf0000000)) {
 532         k += 4;
 533         x <<= 4;
 534     }
 535     if (!(x & 0xc0000000)) {
 536         k += 2;
 537         x <<= 2;
 538     }
 539     if (!(x & 0x80000000)) {
 540         k++;
 541         if (!(x & 0x40000000))
 542             return 32;
 543     }
 544     return k;
 545 }
 546 
 547 /* count trailing 0 bits in the 32-bit integer y, and shift y right by that
 548    number of bits. */
 549 
 550 static int
 551 lo0bits(ULong *y)
 552 {
 553     int k;
 554     ULong x = *y;
 555 
 556     if (x & 7) {
 557         if (x & 1)
 558             return 0;
 559         if (x & 2) {
 560             *y = x >> 1;
 561             return 1;
 562         }
 563         *y = x >> 2;
 564         return 2;
 565     }
 566     k = 0;
 567     if (!(x & 0xffff)) {
 568         k = 16;
 569         x >>= 16;
 570     }
 571     if (!(x & 0xff)) {
 572         k += 8;
 573         x >>= 8;
 574     }
 575     if (!(x & 0xf)) {
 576         k += 4;
 577         x >>= 4;
 578     }
 579     if (!(x & 0x3)) {
 580         k += 2;
 581         x >>= 2;
 582     }
 583     if (!(x & 1)) {
 584         k++;
 585         x >>= 1;
 586         if (!x)
 587             return 32;
 588     }
 589     *y = x;
 590     return k;
 591 }
 592 
 593 /* convert a small nonnegative integer to a Bigint */
 594 
 595 static Bigint *
 596 i2b(int i)
 597 {
 598     Bigint *b;
 599 
 600     b = Balloc(1);
 601     if (b == NULL)
 602         return NULL;
 603     b->x[0] = i;
 604     b->wds = 1;
 605     return b;
 606 }
 607 
 608 /* multiply two Bigints.  Returns a new Bigint, or NULL on failure.  Ignores
 609    the signs of a and b. */
 610 
 611 static Bigint *
 612 mult(Bigint *a, Bigint *b)
 613 {
 614     Bigint *c;
 615     int k, wa, wb, wc;
 616     ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
 617     ULong y;
 618 #ifdef ULLong
 619     ULLong carry, z;
 620 #else
 621     ULong carry, z;
 622     ULong z2;
 623 #endif
 624 
 625     if ((!a->x[0] && a->wds == 1) || (!b->x[0] && b->wds == 1)) {
 626         c = Balloc(0);
 627         if (c == NULL)
 628             return NULL;
 629         c->wds = 1;
 630         c->x[0] = 0;
 631         return c;
 632     }
 633 
 634     if (a->wds < b->wds) {
 635         c = a;
 636         a = b;
 637         b = c;
 638     }
 639     k = a->k;
 640     wa = a->wds;
 641     wb = b->wds;
 642     wc = wa + wb;
 643     if (wc > a->maxwds)
 644         k++;
 645     c = Balloc(k);
 646     if (c == NULL)
 647         return NULL;
 648     for(x = c->x, xa = x + wc; x < xa; x++)
 649         *x = 0;
 650     xa = a->x;
 651     xae = xa + wa;
 652     xb = b->x;
 653     xbe = xb + wb;
 654     xc0 = c->x;
 655 #ifdef ULLong
 656     for(; xb < xbe; xc0++) {
 657         if ((y = *xb++)) {
 658             x = xa;
 659             xc = xc0;
 660             carry = 0;
 661             do {
 662                 z = *x++ * (ULLong)y + *xc + carry;
 663                 carry = z >> 32;
 664                 *xc++ = (ULong)(z & FFFFFFFF);
 665             }
 666             while(x < xae);
 667             *xc = (ULong)carry;
 668         }
 669     }
 670 #else
 671     for(; xb < xbe; xb++, xc0++) {
 672         if (y = *xb & 0xffff) {
 673             x = xa;
 674             xc = xc0;
 675             carry = 0;
 676             do {
 677                 z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
 678                 carry = z >> 16;
 679                 z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
 680                 carry = z2 >> 16;
 681                 Storeinc(xc, z2, z);
 682             }
 683             while(x < xae);
 684             *xc = carry;
 685         }
 686         if (y = *xb >> 16) {
 687             x = xa;
 688             xc = xc0;
 689             carry = 0;
 690             z2 = *xc;
 691             do {
 692                 z = (*x & 0xffff) * y + (*xc >> 16) + carry;
 693                 carry = z >> 16;
 694                 Storeinc(xc, z, z2);
 695                 z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
 696                 carry = z2 >> 16;
 697             }
 698             while(x < xae);
 699             *xc = z2;
 700         }
 701     }
 702 #endif
 703     for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
 704     c->wds = wc;
 705     return c;
 706 }
 707 
 708 #ifndef Py_USING_MEMORY_DEBUGGER
 709 
 710 /* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */
 711 
 712 static Bigint *p5s;
 713 
 714 /* multiply the Bigint b by 5**k.  Returns a pointer to the result, or NULL on
 715    failure; if the returned pointer is distinct from b then the original
 716    Bigint b will have been Bfree'd.   Ignores the sign of b. */
 717 
 718 static Bigint *
 719 pow5mult(Bigint *b, int k)
 720 {
 721     Bigint *b1, *p5, *p51;
 722     int i;
 723     static int p05[3] = { 5, 25, 125 };
 724 
 725     if ((i = k & 3)) {
 726         b = multadd(b, p05[i-1], 0);
 727         if (b == NULL)
 728             return NULL;
 729     }
 730 
 731     if (!(k >>= 2))
 732         return b;
 733     p5 = p5s;
 734     if (!p5) {
 735         /* first time */
 736         p5 = i2b(625);
 737         if (p5 == NULL) {
 738             Bfree(b);
 739             return NULL;
 740         }
 741         p5s = p5;
 742         p5->next = 0;
 743     }
 744     for(;;) {
 745         if (k & 1) {
 746             b1 = mult(b, p5);
 747             Bfree(b);
 748             b = b1;
 749             if (b == NULL)
 750                 return NULL;
 751         }
 752         if (!(k >>= 1))
 753             break;
 754         p51 = p5->next;
 755         if (!p51) {
 756             p51 = mult(p5,p5);
 757             if (p51 == NULL) {
 758                 Bfree(b);
 759                 return NULL;
 760             }
 761             p51->next = 0;
 762             p5->next = p51;
 763         }
 764         p5 = p51;
 765     }
 766     return b;
 767 }
 768 
 769 #else
 770 
 771 /* Version of pow5mult that doesn't cache powers of 5. Provided for
 772    the benefit of memory debugging tools like Valgrind. */
 773 
 774 static Bigint *
 775 pow5mult(Bigint *b, int k)
 776 {
 777     Bigint *b1, *p5, *p51;
 778     int i;
 779     static int p05[3] = { 5, 25, 125 };
 780 
 781     if ((i = k & 3)) {
 782         b = multadd(b, p05[i-1], 0);
 783         if (b == NULL)
 784             return NULL;
 785     }
 786 
 787     if (!(k >>= 2))
 788         return b;
 789     p5 = i2b(625);
 790     if (p5 == NULL) {
 791         Bfree(b);
 792         return NULL;
 793     }
 794 
 795     for(;;) {
 796         if (k & 1) {
 797             b1 = mult(b, p5);
 798             Bfree(b);
 799             b = b1;
 800             if (b == NULL) {
 801                 Bfree(p5);
 802                 return NULL;
 803             }
 804         }
 805         if (!(k >>= 1))
 806             break;
 807         p51 = mult(p5, p5);
 808         Bfree(p5);
 809         p5 = p51;
 810         if (p5 == NULL) {
 811             Bfree(b);
 812             return NULL;
 813         }
 814     }
 815     Bfree(p5);
 816     return b;
 817 }
 818 
 819 #endif /* Py_USING_MEMORY_DEBUGGER */
 820 
 821 /* shift a Bigint b left by k bits.  Return a pointer to the shifted result,
 822    or NULL on failure.  If the returned pointer is distinct from b then the
 823    original b will have been Bfree'd.   Ignores the sign of b. */
 824 
 825 static Bigint *
 826 lshift(Bigint *b, int k)
 827 {
 828     int i, k1, n, n1;
 829     Bigint *b1;
 830     ULong *x, *x1, *xe, z;
 831 
 832     if (!k || (!b->x[0] && b->wds == 1))
 833         return b;
 834 
 835     n = k >> 5;
 836     k1 = b->k;
 837     n1 = n + b->wds + 1;
 838     for(i = b->maxwds; n1 > i; i <<= 1)
 839         k1++;
 840     b1 = Balloc(k1);
 841     if (b1 == NULL) {
 842         Bfree(b);
 843         return NULL;
 844     }
 845     x1 = b1->x;
 846     for(i = 0; i < n; i++)
 847         *x1++ = 0;
 848     x = b->x;
 849     xe = x + b->wds;
 850     if (k &= 0x1f) {
 851         k1 = 32 - k;
 852         z = 0;
 853         do {
 854             *x1++ = *x << k | z;
 855             z = *x++ >> k1;
 856         }
 857         while(x < xe);
 858         if ((*x1 = z))
 859             ++n1;
 860     }
 861     else do
 862              *x1++ = *x++;
 863         while(x < xe);
 864     b1->wds = n1 - 1;
 865     Bfree(b);
 866     return b1;
 867 }
 868 
 869 /* Do a three-way compare of a and b, returning -1 if a < b, 0 if a == b and
 870    1 if a > b.  Ignores signs of a and b. */
 871 
 872 static int
 873 cmp(Bigint *a, Bigint *b)
 874 {
 875     ULong *xa, *xa0, *xb, *xb0;
 876     int i, j;
 877 
 878     i = a->wds;
 879     j = b->wds;
 880 #ifdef DEBUG
 881     if (i > 1 && !a->x[i-1])
 882         Bug("cmp called with a->x[a->wds-1] == 0");
 883     if (j > 1 && !b->x[j-1])
 884         Bug("cmp called with b->x[b->wds-1] == 0");
 885 #endif
 886     if (i -= j)
 887         return i;
 888     xa0 = a->x;
 889     xa = xa0 + j;
 890     xb0 = b->x;
 891     xb = xb0 + j;
 892     for(;;) {
 893         if (*--xa != *--xb)
 894             return *xa < *xb ? -1 : 1;
 895         if (xa <= xa0)
 896             break;
 897     }
 898     return 0;
 899 }
 900 
 901 /* Take the difference of Bigints a and b, returning a new Bigint.  Returns
 902    NULL on failure.  The signs of a and b are ignored, but the sign of the
 903    result is set appropriately. */
 904 
 905 static Bigint *
 906 diff(Bigint *a, Bigint *b)
 907 {
 908     Bigint *c;
 909     int i, wa, wb;
 910     ULong *xa, *xae, *xb, *xbe, *xc;
 911 #ifdef ULLong
 912     ULLong borrow, y;
 913 #else
 914     ULong borrow, y;
 915     ULong z;
 916 #endif
 917 
 918     i = cmp(a,b);
 919     if (!i) {
 920         c = Balloc(0);
 921         if (c == NULL)
 922             return NULL;
 923         c->wds = 1;
 924         c->x[0] = 0;
 925         return c;
 926     }
 927     if (i < 0) {
 928         c = a;
 929         a = b;
 930         b = c;
 931         i = 1;
 932     }
 933     else
 934         i = 0;
 935     c = Balloc(a->k);
 936     if (c == NULL)
 937         return NULL;
 938     c->sign = i;
 939     wa = a->wds;
 940     xa = a->x;
 941     xae = xa + wa;
 942     wb = b->wds;
 943     xb = b->x;
 944     xbe = xb + wb;
 945     xc = c->x;
 946     borrow = 0;
 947 #ifdef ULLong
 948     do {
 949         y = (ULLong)*xa++ - *xb++ - borrow;
 950         borrow = y >> 32 & (ULong)1;
 951         *xc++ = (ULong)(y & FFFFFFFF);
 952     }
 953     while(xb < xbe);
 954     while(xa < xae) {
 955         y = *xa++ - borrow;
 956         borrow = y >> 32 & (ULong)1;
 957         *xc++ = (ULong)(y & FFFFFFFF);
 958     }
 959 #else
 960     do {
 961         y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
 962         borrow = (y & 0x10000) >> 16;
 963         z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
 964         borrow = (z & 0x10000) >> 16;
 965         Storeinc(xc, z, y);
 966     }
 967     while(xb < xbe);
 968     while(xa < xae) {
 969         y = (*xa & 0xffff) - borrow;
 970         borrow = (y & 0x10000) >> 16;
 971         z = (*xa++ >> 16) - borrow;
 972         borrow = (z & 0x10000) >> 16;
 973         Storeinc(xc, z, y);
 974     }
 975 #endif
 976     while(!*--xc)
 977         wa--;
 978     c->wds = wa;
 979     return c;
 980 }
 981 
 982 /* Given a positive normal double x, return the difference between x and the
 983    next double up.  Doesn't give correct results for subnormals. */
 984 
 985 static double
 986 ulp(U *x)
 987 {
 988     Long L;
 989     U u;
 990 
 991     L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
 992     word0(&u) = L;
 993     word1(&u) = 0;
 994     return dval(&u);
 995 }
 996 
 997 /* Convert a Bigint to a double plus an exponent */
 998 
 999 static double
1000 b2d(Bigint *a, int *e)
1001 {
1002     ULong *xa, *xa0, w, y, z;
1003     int k;
1004     U d;
1005 
1006     xa0 = a->x;
1007     xa = xa0 + a->wds;
1008     y = *--xa;
1009 #ifdef DEBUG
1010     if (!y) Bug("zero y in b2d");
1011 #endif
1012     k = hi0bits(y);
1013     *e = 32 - k;
1014     if (k < Ebits) {
1015         word0(&d) = Exp_1 | y >> (Ebits - k);
1016         w = xa > xa0 ? *--xa : 0;
1017         word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
1018         goto ret_d;
1019     }
1020     z = xa > xa0 ? *--xa : 0;
1021     if (k -= Ebits) {
1022         word0(&d) = Exp_1 | y << k | z >> (32 - k);
1023         y = xa > xa0 ? *--xa : 0;
1024         word1(&d) = z << k | y >> (32 - k);
1025     }
1026     else {
1027         word0(&d) = Exp_1 | y;
1028         word1(&d) = z;
1029     }
1030   ret_d:
1031     return dval(&d);
1032 }
1033 
1034 /* Convert a scaled double to a Bigint plus an exponent.  Similar to d2b,
1035    except that it accepts the scale parameter used in _Py_dg_strtod (which
1036    should be either 0 or 2*P), and the normalization for the return value is
1037    different (see below).  On input, d should be finite and nonnegative, and d
1038    / 2**scale should be exactly representable as an IEEE 754 double.
1039 
1040    Returns a Bigint b and an integer e such that
1041 
1042      dval(d) / 2**scale = b * 2**e.
1043 
1044    Unlike d2b, b is not necessarily odd: b and e are normalized so
1045    that either 2**(P-1) <= b < 2**P and e >= Etiny, or b < 2**P
1046    and e == Etiny.  This applies equally to an input of 0.0: in that
1047    case the return values are b = 0 and e = Etiny.
1048 
1049    The above normalization ensures that for all possible inputs d,
1050    2**e gives ulp(d/2**scale).
1051 
1052    Returns NULL on failure.
1053 */
1054 
1055 static Bigint *
1056 sd2b(U *d, int scale, int *e)
1057 {
1058     Bigint *b;
1059 
1060     b = Balloc(1);
1061     if (b == NULL)
1062         return NULL;
1063     
1064     /* First construct b and e assuming that scale == 0. */
1065     b->wds = 2;
1066     b->x[0] = word1(d);
1067     b->x[1] = word0(d) & Frac_mask;
1068     *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
1069     if (*e < Etiny)
1070         *e = Etiny;
1071     else
1072         b->x[1] |= Exp_msk1;
1073 
1074     /* Now adjust for scale, provided that b != 0. */
1075     if (scale && (b->x[0] || b->x[1])) {
1076         *e -= scale;
1077         if (*e < Etiny) {
1078             scale = Etiny - *e;
1079             *e = Etiny;
1080             /* We can't shift more than P-1 bits without shifting out a 1. */
1081             assert(0 < scale && scale <= P - 1);
1082             if (scale >= 32) {
1083                 /* The bits shifted out should all be zero. */
1084                 assert(b->x[0] == 0);
1085                 b->x[0] = b->x[1];
1086                 b->x[1] = 0;
1087                 scale -= 32;
1088             }
1089             if (scale) {
1090                 /* The bits shifted out should all be zero. */
1091                 assert(b->x[0] << (32 - scale) == 0);
1092                 b->x[0] = (b->x[0] >> scale) | (b->x[1] << (32 - scale));
1093                 b->x[1] >>= scale;
1094             }
1095         }
1096     }
1097     /* Ensure b is normalized. */
1098     if (!b->x[1])
1099         b->wds = 1;
1100 
1101     return b;
1102 }
1103 
1104 /* Convert a double to a Bigint plus an exponent.  Return NULL on failure.
1105 
1106    Given a finite nonzero double d, return an odd Bigint b and exponent *e
1107    such that fabs(d) = b * 2**e.  On return, *bbits gives the number of
1108    significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
1109 
1110    If d is zero, then b == 0, *e == -1010, *bbits = 0.
1111  */
1112 
1113 static Bigint *
1114 d2b(U *d, int *e, int *bits)
1115 {
1116     Bigint *b;
1117     int de, k;
1118     ULong *x, y, z;
1119     int i;
1120 
1121     b = Balloc(1);
1122     if (b == NULL)
1123         return NULL;
1124     x = b->x;
1125 
1126     z = word0(d) & Frac_mask;
1127     word0(d) &= 0x7fffffff;   /* clear sign bit, which we ignore */
1128     if ((de = (int)(word0(d) >> Exp_shift)))
1129         z |= Exp_msk1;
1130     if ((y = word1(d))) {
1131         if ((k = lo0bits(&y))) {
1132             x[0] = y | z << (32 - k);
1133             z >>= k;
1134         }
1135         else
1136             x[0] = y;
1137         i =
1138             b->wds = (x[1] = z) ? 2 : 1;
1139     }
1140     else {
1141         k = lo0bits(&z);
1142         x[0] = z;
1143         i =
1144             b->wds = 1;
1145         k += 32;
1146     }
1147     if (de) {
1148         *e = de - Bias - (P-1) + k;
1149         *bits = P - k;
1150     }
1151     else {
1152         *e = de - Bias - (P-1) + 1 + k;
1153         *bits = 32*i - hi0bits(x[i-1]);
1154     }
1155     return b;
1156 }
1157 
1158 /* Compute the ratio of two Bigints, as a double.  The result may have an
1159    error of up to 2.5 ulps. */
1160 
1161 static double
1162 ratio(Bigint *a, Bigint *b)
1163 {
1164     U da, db;
1165     int k, ka, kb;
1166 
1167     dval(&da) = b2d(a, &ka);
1168     dval(&db) = b2d(b, &kb);
1169     k = ka - kb + 32*(a->wds - b->wds);
1170     if (k > 0)
1171         word0(&da) += k*Exp_msk1;
1172     else {
1173         k = -k;
1174         word0(&db) += k*Exp_msk1;
1175     }
1176     return dval(&da) / dval(&db);
1177 }
1178 
1179 static const double
1180 tens[] = {
1181     1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
1182     1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
1183     1e20, 1e21, 1e22
1184 };
1185 
1186 static const double
1187 bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
1188 static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
1189                                    9007199254740992.*9007199254740992.e-256
1190                                    /* = 2^106 * 1e-256 */
1191 };
1192 /* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
1193 /* flag unnecessarily.  It leads to a song and dance at the end of strtod. */
1194 #define Scale_Bit 0x10
1195 #define n_bigtens 5
1196 
1197 #define ULbits 32
1198 #define kshift 5
1199 #define kmask 31
1200 
1201 
1202 static int
1203 dshift(Bigint *b, int p2)
1204 {
1205     int rv = hi0bits(b->x[b->wds-1]) - 4;
1206     if (p2 > 0)
1207         rv -= p2;
1208     return rv & kmask;
1209 }
1210 
1211 /* special case of Bigint division.  The quotient is always in the range 0 <=
1212    quotient < 10, and on entry the divisor S is normalized so that its top 4
1213    bits (28--31) are zero and bit 27 is set. */
1214 
1215 static int
1216 quorem(Bigint *b, Bigint *S)
1217 {
1218     int n;
1219     ULong *bx, *bxe, q, *sx, *sxe;
1220 #ifdef ULLong
1221     ULLong borrow, carry, y, ys;
1222 #else
1223     ULong borrow, carry, y, ys;
1224     ULong si, z, zs;
1225 #endif
1226 
1227     n = S->wds;
1228 #ifdef DEBUG
1229     /*debug*/ if (b->wds > n)
1230         /*debug*/       Bug("oversize b in quorem");
1231 #endif
1232     if (b->wds < n)
1233         return 0;
1234     sx = S->x;
1235     sxe = sx + --n;
1236     bx = b->x;
1237     bxe = bx + n;
1238     q = *bxe / (*sxe + 1);      /* ensure q <= true quotient */
1239 #ifdef DEBUG
1240     /*debug*/ if (q > 9)
1241         /*debug*/       Bug("oversized quotient in quorem");
1242 #endif
1243     if (q) {
1244         borrow = 0;
1245         carry = 0;
1246         do {
1247 #ifdef ULLong
1248             ys = *sx++ * (ULLong)q + carry;
1249             carry = ys >> 32;
1250             y = *bx - (ys & FFFFFFFF) - borrow;
1251             borrow = y >> 32 & (ULong)1;
1252             *bx++ = (ULong)(y & FFFFFFFF);
1253 #else
1254             si = *sx++;
1255             ys = (si & 0xffff) * q + carry;
1256             zs = (si >> 16) * q + (ys >> 16);
1257             carry = zs >> 16;
1258             y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
1259             borrow = (y & 0x10000) >> 16;
1260             z = (*bx >> 16) - (zs & 0xffff) - borrow;
1261             borrow = (z & 0x10000) >> 16;
1262             Storeinc(bx, z, y);
1263 #endif
1264         }
1265         while(sx <= sxe);
1266         if (!*bxe) {
1267             bx = b->x;
1268             while(--bxe > bx && !*bxe)
1269                 --n;
1270             b->wds = n;
1271         }
1272     }
1273     if (cmp(b, S) >= 0) {
1274         q++;
1275         borrow = 0;
1276         carry = 0;
1277         bx = b->x;
1278         sx = S->x;
1279         do {
1280 #ifdef ULLong
1281             ys = *sx++ + carry;
1282             carry = ys >> 32;
1283             y = *bx - (ys & FFFFFFFF) - borrow;
1284             borrow = y >> 32 & (ULong)1;
1285             *bx++ = (ULong)(y & FFFFFFFF);
1286 #else
1287             si = *sx++;
1288             ys = (si & 0xffff) + carry;
1289             zs = (si >> 16) + (ys >> 16);
1290             carry = zs >> 16;
1291             y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
1292             borrow = (y & 0x10000) >> 16;
1293             z = (*bx >> 16) - (zs & 0xffff) - borrow;
1294             borrow = (z & 0x10000) >> 16;
1295             Storeinc(bx, z, y);
1296 #endif
1297         }
1298         while(sx <= sxe);
1299         bx = b->x;
1300         bxe = bx + n;
1301         if (!*bxe) {
1302             while(--bxe > bx && !*bxe)
1303                 --n;
1304             b->wds = n;
1305         }
1306     }
1307     return q;
1308 }
1309 
1310 /* sulp(x) is a version of ulp(x) that takes bc.scale into account.
1311 
1312    Assuming that x is finite and nonnegative (positive zero is fine
1313    here) and x / 2^bc.scale is exactly representable as a double,
1314    sulp(x) is equivalent to 2^bc.scale * ulp(x / 2^bc.scale). */
1315 
1316 static double
1317 sulp(U *x, BCinfo *bc)
1318 {
1319     U u;
1320 
1321     if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
1322         /* rv/2^bc->scale is subnormal */
1323         word0(&u) = (P+2)*Exp_msk1;
1324         word1(&u) = 0;
1325         return u.d;
1326     }
1327     else {
1328         assert(word0(x) || word1(x)); /* x != 0.0 */
1329         return ulp(x);
1330     }
1331 }
1332 
1333 /* The bigcomp function handles some hard cases for strtod, for inputs
1334    with more than STRTOD_DIGLIM digits.  It's called once an initial
1335    estimate for the double corresponding to the input string has
1336    already been obtained by the code in _Py_dg_strtod.
1337 
1338    The bigcomp function is only called after _Py_dg_strtod has found a
1339    double value rv such that either rv or rv + 1ulp represents the
1340    correctly rounded value corresponding to the original string.  It
1341    determines which of these two values is the correct one by
1342    computing the decimal digits of rv + 0.5ulp and comparing them with
1343    the corresponding digits of s0.
1344 
1345    In the following, write dv for the absolute value of the number represented
1346    by the input string.
1347 
1348    Inputs:
1349 
1350      s0 points to the first significant digit of the input string.
1351 
1352      rv is a (possibly scaled) estimate for the closest double value to the
1353         value represented by the original input to _Py_dg_strtod.  If
1354         bc->scale is nonzero, then rv/2^(bc->scale) is the approximation to
1355         the input value.
1356 
1357      bc is a struct containing information gathered during the parsing and
1358         estimation steps of _Py_dg_strtod.  Description of fields follows:
1359 
1360         bc->e0 gives the exponent of the input value, such that dv = (integer
1361            given by the bd->nd digits of s0) * 10**e0
1362 
1363         bc->nd gives the total number of significant digits of s0.  It will
1364            be at least 1.
1365 
1366         bc->nd0 gives the number of significant digits of s0 before the
1367            decimal separator.  If there's no decimal separator, bc->nd0 ==
1368            bc->nd.
1369 
1370         bc->scale is the value used to scale rv to avoid doing arithmetic with
1371            subnormal values.  It's either 0 or 2*P (=106).
1372 
1373    Outputs:
1374 
1375      On successful exit, rv/2^(bc->scale) is the closest double to dv.
1376 
1377      Returns 0 on success, -1 on failure (e.g., due to a failed malloc call). */
1378 
1379 static int
1380 bigcomp(U *rv, const char *s0, BCinfo *bc)
1381 {
1382     Bigint *b, *d;
1383     int b2, d2, dd, i, nd, nd0, odd, p2, p5;
1384 
1385     nd = bc->nd;
1386     nd0 = bc->nd0;
1387     p5 = nd + bc->e0;
1388     b = sd2b(rv, bc->scale, &p2);
1389     if (b == NULL)
1390         return -1;
1391 
1392     /* record whether the lsb of rv/2^(bc->scale) is odd:  in the exact halfway
1393        case, this is used for round to even. */
1394     odd = b->x[0] & 1;
1395 
1396     /* left shift b by 1 bit and or a 1 into the least significant bit;
1397        this gives us b * 2**p2 = rv/2^(bc->scale) + 0.5 ulp. */
1398     b = lshift(b, 1);
1399     if (b == NULL)
1400         return -1;
1401     b->x[0] |= 1;
1402     p2--;
1403 
1404     p2 -= p5;
1405     d = i2b(1);
1406     if (d == NULL) {
1407         Bfree(b);
1408         return -1;
1409     }
1410     /* Arrange for convenient computation of quotients:
1411      * shift left if necessary so divisor has 4 leading 0 bits.
1412      */
1413     if (p5 > 0) {
1414         d = pow5mult(d, p5);
1415         if (d == NULL) {
1416             Bfree(b);
1417             return -1;
1418         }
1419     }
1420     else if (p5 < 0) {
1421         b = pow5mult(b, -p5);
1422         if (b == NULL) {
1423             Bfree(d);
1424             return -1;
1425         }
1426     }
1427     if (p2 > 0) {
1428         b2 = p2;
1429         d2 = 0;
1430     }
1431     else {
1432         b2 = 0;
1433         d2 = -p2;
1434     }
1435     i = dshift(d, d2);
1436     if ((b2 += i) > 0) {
1437         b = lshift(b, b2);
1438         if (b == NULL) {
1439             Bfree(d);
1440             return -1;
1441         }
1442     }
1443     if ((d2 += i) > 0) {
1444         d = lshift(d, d2);
1445         if (d == NULL) {
1446             Bfree(b);
1447             return -1;
1448         }
1449     }
1450 
1451     /* Compare s0 with b/d: set dd to -1, 0, or 1 according as s0 < b/d, s0 ==
1452      * b/d, or s0 > b/d.  Here the digits of s0 are thought of as representing
1453      * a number in the range [0.1, 1). */
1454     if (cmp(b, d) >= 0)
1455         /* b/d >= 1 */
1456         dd = -1;
1457     else {
1458         i = 0;
1459         for(;;) {
1460             b = multadd(b, 10, 0);
1461             if (b == NULL) {
1462                 Bfree(d);
1463                 return -1;
1464             }
1465             dd = s0[i < nd0 ? i : i+1] - '0' - quorem(b, d);
1466             i++;
1467 
1468             if (dd)
1469                 break;
1470             if (!b->x[0] && b->wds == 1) {
1471                 /* b/d == 0 */
1472                 dd = i < nd;
1473                 break;
1474             }
1475             if (!(i < nd)) {
1476                 /* b/d != 0, but digits of s0 exhausted */
1477                 dd = -1;
1478                 break;
1479             }
1480         }
1481     }
1482     Bfree(b);
1483     Bfree(d);
1484     if (dd > 0 || (dd == 0 && odd))
1485         dval(rv) += sulp(rv, bc);
1486     return 0;
1487 }
1488 
1489 double
1490 _Py_dg_strtod(const char *s00, char **se)
1491 {
1492     int bb2, bb5, bbe, bd2, bd5, bs2, c, dsign, e, e1, error;
1493     int esign, i, j, k, lz, nd, nd0, odd, sign;
1494     const char *s, *s0, *s1;
1495     double aadj, aadj1;
1496     U aadj2, adj, rv, rv0;
1497     ULong y, z, abs_exp;
1498     Long L;
1499     BCinfo bc;
1500     Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1501 
1502     dval(&rv) = 0.;
1503 
1504     /* Start parsing. */
1505     c = *(s = s00);
1506 
1507     /* Parse optional sign, if present. */
1508     sign = 0;
1509     switch (c) {
1510     case '-':
1511         sign = 1;
1512         /* no break */
1513     case '+':
1514         c = *++s;
1515     }
1516 
1517     /* Skip leading zeros: lz is true iff there were leading zeros. */
1518     s1 = s;
1519     while (c == '0')
1520         c = *++s;
1521     lz = s != s1;
1522 
1523     /* Point s0 at the first nonzero digit (if any).  nd0 will be the position
1524        of the point relative to s0.  nd will be the total number of digits
1525        ignoring leading zeros. */
1526     s0 = s1 = s;
1527     while ('0' <= c && c <= '9')
1528         c = *++s;
1529     nd0 = nd = s - s1;
1530 
1531     /* Parse decimal point and following digits. */
1532     if (c == '.') {
1533         c = *++s;
1534         if (!nd) {
1535             s1 = s;
1536             while (c == '0')
1537                 c = *++s;
1538             lz = lz || s != s1;
1539             nd0 -= s - s1;
1540             s0 = s;
1541         }
1542         s1 = s;
1543         while ('0' <= c && c <= '9')
1544             c = *++s;
1545         nd += s - s1;
1546     }
1547 
1548     /* Now lz is true if and only if there were leading zero digits, and nd
1549        gives the total number of digits ignoring leading zeros.  A valid input
1550        must have at least one digit. */
1551     if (!nd && !lz) {
1552         if (se)
1553             *se = (char *)s00;
1554         goto parse_error;
1555     }
1556 
1557     /* Parse exponent. */
1558     e = 0;
1559     if (c == 'e' || c == 'E') {
1560         s00 = s;
1561         c = *++s;
1562 
1563         /* Exponent sign. */
1564         esign = 0;
1565         switch (c) {
1566         case '-':
1567             esign = 1;
1568             /* no break */
1569         case '+':
1570             c = *++s;
1571         }
1572 
1573         /* Skip zeros.  lz is true iff there are leading zeros. */
1574         s1 = s;
1575         while (c == '0')
1576             c = *++s;
1577         lz = s != s1;
1578 
1579         /* Get absolute value of the exponent. */
1580         s1 = s;
1581         abs_exp = 0;
1582         while ('0' <= c && c <= '9') {
1583             abs_exp = 10*abs_exp + (c - '0');
1584             c = *++s;
1585         }
1586 
1587         /* abs_exp will be correct modulo 2**32.  But 10**9 < 2**32, so if
1588            there are at most 9 significant exponent digits then overflow is
1589            impossible. */
1590         if (s - s1 > 9 || abs_exp > MAX_ABS_EXP)
1591             e = (int)MAX_ABS_EXP;
1592         else
1593             e = (int)abs_exp;
1594         if (esign)
1595             e = -e;
1596 
1597         /* A valid exponent must have at least one digit. */
1598         if (s == s1 && !lz)
1599             s = s00;
1600     }
1601 
1602     /* Adjust exponent to take into account position of the point. */
1603     e -= nd - nd0;
1604     if (nd0 <= 0)
1605         nd0 = nd;
1606 
1607     /* Finished parsing.  Set se to indicate how far we parsed */
1608     if (se)
1609         *se = (char *)s;
1610 
1611     /* If all digits were zero, exit with return value +-0.0.  Otherwise,
1612        strip trailing zeros: scan back until we hit a nonzero digit. */
1613     if (!nd)
1614         goto ret;
1615     for (i = nd; i > 0; ) {
1616         --i;
1617         if (s0[i < nd0 ? i : i+1] != '0') {
1618             ++i;
1619             break;
1620         }
1621     }
1622     e += nd - i;
1623     nd = i;
1624     if (nd0 > nd)
1625         nd0 = nd;
1626 
1627     /* Summary of parsing results.  After parsing, and dealing with zero
1628      * inputs, we have values s0, nd0, nd, e, sign, where:
1629      *
1630      *  - s0 points to the first significant digit of the input string
1631      *
1632      *  - nd is the total number of significant digits (here, and
1633      *    below, 'significant digits' means the set of digits of the
1634      *    significand of the input that remain after ignoring leading
1635      *    and trailing zeros).
1636      *
1637      *  - nd0 indicates the position of the decimal point, if present; it
1638      *    satisfies 1 <= nd0 <= nd.  The nd significant digits are in
1639      *    s0[0:nd0] and s0[nd0+1:nd+1] using the usual Python half-open slice
1640      *    notation.  (If nd0 < nd, then s0[nd0] contains a '.'  character; if
1641      *    nd0 == nd, then s0[nd0] could be any non-digit character.)
1642      *
1643      *  - e is the adjusted exponent: the absolute value of the number
1644      *    represented by the original input string is n * 10**e, where
1645      *    n is the integer represented by the concatenation of
1646      *    s0[0:nd0] and s0[nd0+1:nd+1]
1647      *
1648      *  - sign gives the sign of the input:  1 for negative, 0 for positive
1649      *
1650      *  - the first and last significant digits are nonzero
1651      */
1652 
1653     /* put first DBL_DIG+1 digits into integer y and z.
1654      *
1655      *  - y contains the value represented by the first min(9, nd)
1656      *    significant digits
1657      *
1658      *  - if nd > 9, z contains the value represented by significant digits
1659      *    with indices in [9, min(16, nd)).  So y * 10**(min(16, nd) - 9) + z
1660      *    gives the value represented by the first min(16, nd) sig. digits.
1661      */
1662 
1663     bc.e0 = e1 = e;
1664     y = z = 0;
1665     for (i = 0; i < nd; i++) {
1666         if (i < 9)
1667             y = 10*y + s0[i < nd0 ? i : i+1] - '0';
1668         else if (i < DBL_DIG+1)
1669             z = 10*z + s0[i < nd0 ? i : i+1] - '0';
1670         else
1671             break;
1672     }
1673 
1674     k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1675     dval(&rv) = y;
1676     if (k > 9) {
1677         dval(&rv) = tens[k - 9] * dval(&rv) + z;
1678     }
1679     bd0 = 0;
1680     if (nd <= DBL_DIG
1681         && Flt_Rounds == 1
1682         ) {
1683         if (!e)
1684             goto ret;
1685         if (e > 0) {
1686             if (e <= Ten_pmax) {
1687                 dval(&rv) *= tens[e];
1688                 goto ret;
1689             }
1690             i = DBL_DIG - nd;
1691             if (e <= Ten_pmax + i) {
1692                 /* A fancier test would sometimes let us do
1693                  * this for larger i values.
1694                  */
1695                 e -= i;
1696                 dval(&rv) *= tens[i];
1697                 dval(&rv) *= tens[e];
1698                 goto ret;
1699             }
1700         }
1701         else if (e >= -Ten_pmax) {
1702             dval(&rv) /= tens[-e];
1703             goto ret;
1704         }
1705     }
1706     e1 += nd - k;
1707 
1708     bc.scale = 0;
1709 
1710     /* Get starting approximation = rv * 10**e1 */
1711 
1712     if (e1 > 0) {
1713         if ((i = e1 & 15))
1714             dval(&rv) *= tens[i];
1715         if (e1 &= ~15) {
1716             if (e1 > DBL_MAX_10_EXP)
1717                 goto ovfl;
1718             e1 >>= 4;
1719             for(j = 0; e1 > 1; j++, e1 >>= 1)
1720                 if (e1 & 1)
1721                     dval(&rv) *= bigtens[j];
1722             /* The last multiplication could overflow. */
1723             word0(&rv) -= P*Exp_msk1;
1724             dval(&rv) *= bigtens[j];
1725             if ((z = word0(&rv) & Exp_mask)
1726                 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1727                 goto ovfl;
1728             if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1729                 /* set to largest number */
1730                 /* (Can't trust DBL_MAX) */
1731                 word0(&rv) = Big0;
1732                 word1(&rv) = Big1;
1733             }
1734             else
1735                 word0(&rv) += P*Exp_msk1;
1736         }
1737     }
1738     else if (e1 < 0) {
1739         /* The input decimal value lies in [10**e1, 10**(e1+16)).
1740 
1741            If e1 <= -512, underflow immediately.
1742            If e1 <= -256, set bc.scale to 2*P.
1743 
1744            So for input value < 1e-256, bc.scale is always set;
1745            for input value >= 1e-240, bc.scale is never set.
1746            For input values in [1e-256, 1e-240), bc.scale may or may
1747            not be set. */
1748 
1749         e1 = -e1;
1750         if ((i = e1 & 15))
1751             dval(&rv) /= tens[i];
1752         if (e1 >>= 4) {
1753             if (e1 >= 1 << n_bigtens)
1754                 goto undfl;
1755             if (e1 & Scale_Bit)
1756                 bc.scale = 2*P;
1757             for(j = 0; e1 > 0; j++, e1 >>= 1)
1758                 if (e1 & 1)
1759                     dval(&rv) *= tinytens[j];
1760             if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1761                                             >> Exp_shift)) > 0) {
1762                 /* scaled rv is denormal; clear j low bits */
1763                 if (j >= 32) {
1764                     word1(&rv) = 0;
1765                     if (j >= 53)
1766                         word0(&rv) = (P+2)*Exp_msk1;
1767                     else
1768                         word0(&rv) &= 0xffffffff << (j-32);
1769                 }
1770                 else
1771                     word1(&rv) &= 0xffffffff << j;
1772             }
1773             if (!dval(&rv))
1774                 goto undfl;
1775         }
1776     }
1777 
1778     /* Now the hard part -- adjusting rv to the correct value.*/
1779 
1780     /* Put digits into bd: true value = bd * 10^e */
1781 
1782     bc.nd = nd;
1783     bc.nd0 = nd0;       /* Only needed if nd > STRTOD_DIGLIM, but done here */
1784                         /* to silence an erroneous warning about bc.nd0 */
1785                         /* possibly not being initialized. */
1786     if (nd > STRTOD_DIGLIM) {
1787         /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
1788         /* minimum number of decimal digits to distinguish double values */
1789         /* in IEEE arithmetic. */
1790 
1791         /* Truncate input to 18 significant digits, then discard any trailing
1792            zeros on the result by updating nd, nd0, e and y suitably. (There's
1793            no need to update z; it's not reused beyond this point.) */
1794         for (i = 18; i > 0; ) {
1795             /* scan back until we hit a nonzero digit.  significant digit 'i'
1796             is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
1797             --i;
1798             if (s0[i < nd0 ? i : i+1] != '0') {
1799                 ++i;
1800                 break;
1801             }
1802         }
1803         e += nd - i;
1804         nd = i;
1805         if (nd0 > nd)
1806             nd0 = nd;
1807         if (nd < 9) { /* must recompute y */
1808             y = 0;
1809             for(i = 0; i < nd0; ++i)
1810                 y = 10*y + s0[i] - '0';
1811             for(; i < nd; ++i)
1812                 y = 10*y + s0[i+1] - '0';
1813         }
1814     }
1815     bd0 = s2b(s0, nd0, nd, y);
1816     if (bd0 == NULL)
1817         goto failed_malloc;
1818 
1819     /* Notation for the comments below.  Write:
1820 
1821          - dv for the absolute value of the number represented by the original
1822            decimal input string.
1823 
1824          - if we've truncated dv, write tdv for the truncated value.
1825            Otherwise, set tdv == dv.
1826 
1827          - srv for the quantity rv/2^bc.scale; so srv is the current binary
1828            approximation to tdv (and dv).  It should be exactly representable
1829            in an IEEE 754 double.
1830     */
1831 
1832     for(;;) {
1833 
1834         /* This is the main correction loop for _Py_dg_strtod.
1835 
1836            We've got a decimal value tdv, and a floating-point approximation
1837            srv=rv/2^bc.scale to tdv.  The aim is to determine whether srv is
1838            close enough (i.e., within 0.5 ulps) to tdv, and to compute a new
1839            approximation if not.
1840 
1841            To determine whether srv is close enough to tdv, compute integers
1842            bd, bb and bs proportional to tdv, srv and 0.5 ulp(srv)
1843            respectively, and then use integer arithmetic to determine whether
1844            |tdv - srv| is less than, equal to, or greater than 0.5 ulp(srv).
1845         */
1846 
1847         bd = Balloc(bd0->k);
1848         if (bd == NULL) {
1849             Bfree(bd0);
1850             goto failed_malloc;
1851         }
1852         Bcopy(bd, bd0);
1853         bb = sd2b(&rv, bc.scale, &bbe);   /* srv = bb * 2^bbe */
1854         if (bb == NULL) {
1855             Bfree(bd);
1856             Bfree(bd0);
1857             goto failed_malloc;
1858         }
1859         /* Record whether lsb of bb is odd, in case we need this
1860            for the round-to-even step later. */
1861         odd = bb->x[0] & 1;
1862 
1863         /* tdv = bd * 10**e;  srv = bb * 2**bbe */
1864         bs = i2b(1);
1865         if (bs == NULL) {
1866             Bfree(bb);
1867             Bfree(bd);
1868             Bfree(bd0);
1869             goto failed_malloc;
1870         }
1871 
1872         if (e >= 0) {
1873             bb2 = bb5 = 0;
1874             bd2 = bd5 = e;
1875         }
1876         else {
1877             bb2 = bb5 = -e;
1878             bd2 = bd5 = 0;
1879         }
1880         if (bbe >= 0)
1881             bb2 += bbe;
1882         else
1883             bd2 -= bbe;
1884         bs2 = bb2;
1885         bb2++;
1886         bd2++;
1887 
1888         /* At this stage bd5 - bb5 == e == bd2 - bb2 + bbe, bb2 - bs2 == 1,
1889 	   and bs == 1, so:
1890 
1891               tdv == bd * 10**e = bd * 2**(bbe - bb2 + bd2) * 5**(bd5 - bb5)
1892               srv == bb * 2**bbe = bb * 2**(bbe - bb2 + bb2)
1893 	      0.5 ulp(srv) == 2**(bbe-1) = bs * 2**(bbe - bb2 + bs2)
1894 
1895 	   It follows that:
1896 
1897               M * tdv = bd * 2**bd2 * 5**bd5
1898               M * srv = bb * 2**bb2 * 5**bb5
1899               M * 0.5 ulp(srv) = bs * 2**bs2 * 5**bb5
1900 
1901 	   for some constant M.  (Actually, M == 2**(bb2 - bbe) * 5**bb5, but
1902 	   this fact is not needed below.)
1903         */
1904 
1905         /* Remove factor of 2**i, where i = min(bb2, bd2, bs2). */
1906         i = bb2 < bd2 ? bb2 : bd2;
1907         if (i > bs2)
1908             i = bs2;
1909         if (i > 0) {
1910             bb2 -= i;
1911             bd2 -= i;
1912             bs2 -= i;
1913         }
1914 
1915         /* Scale bb, bd, bs by the appropriate powers of 2 and 5. */
1916         if (bb5 > 0) {
1917             bs = pow5mult(bs, bb5);
1918             if (bs == NULL) {
1919                 Bfree(bb);
1920                 Bfree(bd);
1921                 Bfree(bd0);
1922                 goto failed_malloc;
1923             }
1924             bb1 = mult(bs, bb);
1925             Bfree(bb);
1926             bb = bb1;
1927             if (bb == NULL) {
1928                 Bfree(bs);
1929                 Bfree(bd);
1930                 Bfree(bd0);
1931                 goto failed_malloc;
1932             }
1933         }
1934         if (bb2 > 0) {
1935             bb = lshift(bb, bb2);
1936             if (bb == NULL) {
1937                 Bfree(bs);
1938                 Bfree(bd);
1939                 Bfree(bd0);
1940                 goto failed_malloc;
1941             }
1942         }
1943         if (bd5 > 0) {
1944             bd = pow5mult(bd, bd5);
1945             if (bd == NULL) {
1946                 Bfree(bb);
1947                 Bfree(bs);
1948                 Bfree(bd0);
1949                 goto failed_malloc;
1950             }
1951         }
1952         if (bd2 > 0) {
1953             bd = lshift(bd, bd2);
1954             if (bd == NULL) {
1955                 Bfree(bb);
1956                 Bfree(bs);
1957                 Bfree(bd0);
1958                 goto failed_malloc;
1959             }
1960         }
1961         if (bs2 > 0) {
1962             bs = lshift(bs, bs2);
1963             if (bs == NULL) {
1964                 Bfree(bb);
1965                 Bfree(bd);
1966                 Bfree(bd0);
1967                 goto failed_malloc;
1968             }
1969         }
1970 
1971         /* Now bd, bb and bs are scaled versions of tdv, srv and 0.5 ulp(srv),
1972            respectively.  Compute the difference |tdv - srv|, and compare
1973            with 0.5 ulp(srv). */
1974 
1975         delta = diff(bb, bd);
1976         if (delta == NULL) {
1977             Bfree(bb);
1978             Bfree(bs);
1979             Bfree(bd);
1980             Bfree(bd0);
1981             goto failed_malloc;
1982         }
1983         dsign = delta->sign;
1984         delta->sign = 0;
1985         i = cmp(delta, bs);
1986         if (bc.nd > nd && i <= 0) {
1987             if (dsign)
1988                 break;  /* Must use bigcomp(). */
1989 
1990             /* Here rv overestimates the truncated decimal value by at most
1991                0.5 ulp(rv).  Hence rv either overestimates the true decimal
1992                value by <= 0.5 ulp(rv), or underestimates it by some small
1993                amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
1994                the true decimal value, so it's possible to exit.
1995 
1996                Exception: if scaled rv is a normal exact power of 2, but not
1997                DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
1998                next double, so the correctly rounded result is either rv - 0.5
1999                ulp(rv) or rv; in this case, use bigcomp to distinguish. */
2000 
2001             if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
2002                 /* rv can't be 0, since it's an overestimate for some
2003                    nonzero value.  So rv is a normal power of 2. */
2004                 j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
2005                 /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
2006                    rv / 2^bc.scale >= 2^-1021. */
2007                 if (j - bc.scale >= 2) {
2008                     dval(&rv) -= 0.5 * sulp(&rv, &bc);
2009                     break; /* Use bigcomp. */
2010                 }
2011             }
2012 
2013             {
2014                 bc.nd = nd;
2015                 i = -1; /* Discarded digits make delta smaller. */
2016             }
2017         }
2018 
2019         if (i < 0) {
2020             /* Error is less than half an ulp -- check for
2021              * special case of mantissa a power of two.
2022              */
2023             if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
2024                 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
2025                 ) {
2026                 break;
2027             }
2028             if (!delta->x[0] && delta->wds <= 1) {
2029                 /* exact result */
2030                 break;
2031             }
2032             delta = lshift(delta,Log2P);
2033             if (delta == NULL) {
2034                 Bfree(bb);
2035                 Bfree(bs);
2036                 Bfree(bd);
2037                 Bfree(bd0);
2038                 goto failed_malloc;
2039             }
2040             if (cmp(delta, bs) > 0)
2041                 goto drop_down;
2042             break;
2043         }
2044         if (i == 0) {
2045             /* exactly half-way between */
2046             if (dsign) {
2047                 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
2048                     &&  word1(&rv) == (
2049                         (bc.scale &&
2050                          (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
2051                         (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
2052                         0xffffffff)) {
2053                     /*boundary case -- increment exponent*/
2054                     word0(&rv) = (word0(&rv) & Exp_mask)
2055                         + Exp_msk1
2056                         ;
2057                     word1(&rv) = 0;
2058                     dsign = 0;
Value stored to 'dsign' is never read
(emitted by clang-analyzer)

TODO: a detailed trace is available in the data model (not yet rendered in this report)

Value stored to 'dsign' is never read
(emitted by clang-analyzer)

TODO: a detailed trace is available in the data model (not yet rendered in this report)

2059 break; 2060 } 2061 } 2062 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) { 2063 drop_down: 2064 /* boundary case -- decrement exponent */ 2065 if (bc.scale) { 2066 L = word0(&rv) & Exp_mask; 2067 if (L <= (2*P+1)*Exp_msk1) { 2068 if (L > (P+2)*Exp_msk1) 2069 /* round even ==> */ 2070 /* accept rv */ 2071 break; 2072 /* rv = smallest denormal */ 2073 if (bc.nd > nd) 2074 break; 2075 goto undfl; 2076 } 2077 } 2078 L = (word0(&rv) & Exp_mask) - Exp_msk1; 2079 word0(&rv) = L | Bndry_mask1; 2080 word1(&rv) = 0xffffffff; 2081 break; 2082 } 2083 if (!odd) 2084 break; 2085 if (dsign) 2086 dval(&rv) += sulp(&rv, &bc); 2087 else { 2088 dval(&rv) -= sulp(&rv, &bc); 2089 if (!dval(&rv)) { 2090 if (bc.nd >nd) 2091 break; 2092 goto undfl; 2093 } 2094 } 2095 dsign = 1 - dsign;
Value stored to 'dsign' is never read
(emitted by clang-analyzer)

TODO: a detailed trace is available in the data model (not yet rendered in this report)

Value stored to 'dsign' is never read
(emitted by clang-analyzer)

TODO: a detailed trace is available in the data model (not yet rendered in this report)

2096 break; 2097 } 2098 if ((aadj = ratio(delta, bs)) <= 2.) { 2099 if (dsign) 2100 aadj = aadj1 = 1.; 2101 else if (word1(&rv) || word0(&rv) & Bndry_mask) { 2102 if (word1(&rv) == Tiny1 && !word0(&rv)) { 2103 if (bc.nd >nd) 2104 break; 2105 goto undfl; 2106 } 2107 aadj = 1.; 2108 aadj1 = -1.; 2109 } 2110 else { 2111 /* special case -- power of FLT_RADIX to be */ 2112 /* rounded down... */ 2113 2114 if (aadj < 2./FLT_RADIX) 2115 aadj = 1./FLT_RADIX; 2116 else 2117 aadj *= 0.5; 2118 aadj1 = -aadj; 2119 } 2120 } 2121 else { 2122 aadj *= 0.5; 2123 aadj1 = dsign ? aadj : -aadj; 2124 if (Flt_Rounds == 0) 2125 aadj1 += 0.5; 2126 } 2127 y = word0(&rv) & Exp_mask; 2128 2129 /* Check for overflow */ 2130 2131 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) { 2132 dval(&rv0) = dval(&rv); 2133 word0(&rv) -= P*Exp_msk1; 2134 adj.d = aadj1 * ulp(&rv); 2135 dval(&rv) += adj.d; 2136 if ((word0(&rv) & Exp_mask) >= 2137 Exp_msk1*(DBL_MAX_EXP+Bias-P)) { 2138 if (word0(&rv0) == Big0 && word1(&rv0) == Big1) { 2139 Bfree(bb); 2140 Bfree(bd); 2141 Bfree(bs); 2142 Bfree(bd0); 2143 Bfree(delta); 2144 goto ovfl; 2145 } 2146 word0(&rv) = Big0; 2147 word1(&rv) = Big1; 2148 goto cont; 2149 } 2150 else 2151 word0(&rv) += P*Exp_msk1; 2152 } 2153 else { 2154 if (bc.scale && y <= 2*P*Exp_msk1) { 2155 if (aadj <= 0x7fffffff) { 2156 if ((z = (ULong)aadj) <= 0) 2157 z = 1; 2158 aadj = z; 2159 aadj1 = dsign ? aadj : -aadj; 2160 } 2161 dval(&aadj2) = aadj1; 2162 word0(&aadj2) += (2*P+1)*Exp_msk1 - y; 2163 aadj1 = dval(&aadj2); 2164 } 2165 adj.d = aadj1 * ulp(&rv); 2166 dval(&rv) += adj.d; 2167 } 2168 z = word0(&rv) & Exp_mask; 2169 if (bc.nd == nd) { 2170 if (!bc.scale) 2171 if (y == z) { 2172 /* Can we stop now? */ 2173 L = (Long)aadj; 2174 aadj -= L; 2175 /* The tolerances below are conservative. */ 2176 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) { 2177 if (aadj < .4999999 || aadj > .5000001) 2178 break; 2179 } 2180 else if (aadj < .4999999/FLT_RADIX) 2181 break; 2182 } 2183 } 2184 cont: 2185 Bfree(bb); 2186 Bfree(bd); 2187 Bfree(bs); 2188 Bfree(delta); 2189 } 2190 Bfree(bb); 2191 Bfree(bd); 2192 Bfree(bs); 2193 Bfree(bd0); 2194 Bfree(delta); 2195 if (bc.nd > nd) { 2196 error = bigcomp(&rv, s0, &bc); 2197 if (error) 2198 goto failed_malloc; 2199 } 2200 2201 if (bc.scale) { 2202 word0(&rv0) = Exp_1 - 2*P*Exp_msk1; 2203 word1(&rv0) = 0; 2204 dval(&rv) *= dval(&rv0); 2205 } 2206 2207 ret: 2208 return sign ? -dval(&rv) : dval(&rv); 2209 2210 parse_error: 2211 return 0.0; 2212 2213 failed_malloc: 2214 errno = ENOMEM; 2215 return -1.0; 2216 2217 undfl: 2218 return sign ? -0.0 : 0.0; 2219 2220 ovfl: 2221 errno = ERANGE; 2222 /* Can't trust HUGE_VAL */ 2223 word0(&rv) = Exp_mask; 2224 word1(&rv) = 0; 2225 return sign ? -dval(&rv) : dval(&rv); 2226 2227 } 2228 2229 static char * 2230 rv_alloc(int i) 2231 { 2232 int j, k, *r; 2233 2234 j = sizeof(ULong); 2235 for(k = 0; 2236 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i; 2237 j <<= 1) 2238 k++; 2239 r = (int*)Balloc(k); 2240 if (r == NULL) 2241 return NULL; 2242 *r = k; 2243 return (char *)(r+1); 2244 } 2245 2246 static char * 2247 nrv_alloc(char *s, char **rve, int n) 2248 { 2249 char *rv, *t; 2250 2251 rv = rv_alloc(n); 2252 if (rv == NULL) 2253 return NULL; 2254 t = rv; 2255 while((*t = *s++)) t++; 2256 if (rve) 2257 *rve = t; 2258 return rv; 2259 } 2260 2261 /* freedtoa(s) must be used to free values s returned by dtoa 2262 * when MULTIPLE_THREADS is #defined. It should be used in all cases, 2263 * but for consistency with earlier versions of dtoa, it is optional 2264 * when MULTIPLE_THREADS is not defined. 2265 */ 2266 2267 void 2268 _Py_dg_freedtoa(char *s) 2269 { 2270 Bigint *b = (Bigint *)((int *)s - 1); 2271 b->maxwds = 1 << (b->k = *(int*)b); 2272 Bfree(b); 2273 } 2274 2275 /* dtoa for IEEE arithmetic (dmg): convert double to ASCII string. 2276 * 2277 * Inspired by "How to Print Floating-Point Numbers Accurately" by 2278 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126]. 2279 * 2280 * Modifications: 2281 * 1. Rather than iterating, we use a simple numeric overestimate 2282 * to determine k = floor(log10(d)). We scale relevant 2283 * quantities using O(log2(k)) rather than O(k) multiplications. 2284 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't 2285 * try to generate digits strictly left to right. Instead, we 2286 * compute with fewer bits and propagate the carry if necessary 2287 * when rounding the final digit up. This is often faster. 2288 * 3. Under the assumption that input will be rounded nearest, 2289 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22. 2290 * That is, we allow equality in stopping tests when the 2291 * round-nearest rule will give the same floating-point value 2292 * as would satisfaction of the stopping test with strict 2293 * inequality. 2294 * 4. We remove common factors of powers of 2 from relevant 2295 * quantities. 2296 * 5. When converting floating-point integers less than 1e16, 2297 * we use floating-point arithmetic rather than resorting 2298 * to multiple-precision integers. 2299 * 6. When asked to produce fewer than 15 digits, we first try 2300 * to get by with floating-point arithmetic; we resort to 2301 * multiple-precision integer arithmetic only if we cannot 2302 * guarantee that the floating-point calculation has given 2303 * the correctly rounded result. For k requested digits and 2304 * "uniformly" distributed input, the probability is 2305 * something like 10^(k-15) that we must resort to the Long 2306 * calculation. 2307 */ 2308 2309 /* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory 2310 leakage, a successful call to _Py_dg_dtoa should always be matched by a 2311 call to _Py_dg_freedtoa. */ 2312 2313 char * 2314 _Py_dg_dtoa(double dd, int mode, int ndigits, 2315 int *decpt, int *sign, char **rve) 2316 { 2317 /* Arguments ndigits, decpt, sign are similar to those 2318 of ecvt and fcvt; trailing zeros are suppressed from 2319 the returned string. If not null, *rve is set to point 2320 to the end of the return value. If d is +-Infinity or NaN, 2321 then *decpt is set to 9999. 2322 2323 mode: 2324 0 ==> shortest string that yields d when read in 2325 and rounded to nearest. 2326 1 ==> like 0, but with Steele & White stopping rule; 2327 e.g. with IEEE P754 arithmetic , mode 0 gives 2328 1e23 whereas mode 1 gives 9.999999999999999e22. 2329 2 ==> max(1,ndigits) significant digits. This gives a 2330 return value similar to that of ecvt, except 2331 that trailing zeros are suppressed. 2332 3 ==> through ndigits past the decimal point. This 2333 gives a return value similar to that from fcvt, 2334 except that trailing zeros are suppressed, and 2335 ndigits can be negative. 2336 4,5 ==> similar to 2 and 3, respectively, but (in 2337 round-nearest mode) with the tests of mode 0 to 2338 possibly return a shorter string that rounds to d. 2339 With IEEE arithmetic and compilation with 2340 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same 2341 as modes 2 and 3 when FLT_ROUNDS != 1. 2342 6-9 ==> Debugging modes similar to mode - 4: don't try 2343 fast floating-point estimate (if applicable). 2344 2345 Values of mode other than 0-9 are treated as mode 0. 2346 2347 Sufficient space is allocated to the return value 2348 to hold the suppressed trailing zeros. 2349 */ 2350 2351 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1, 2352 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5, 2353 spec_case, try_quick; 2354 Long L; 2355 int denorm; 2356 ULong x; 2357 Bigint *b, *b1, *delta, *mlo, *mhi, *S; 2358 U d2, eps, u; 2359 double ds; 2360 char *s, *s0; 2361 2362 /* set pointers to NULL, to silence gcc compiler warnings and make 2363 cleanup easier on error */ 2364 mlo = mhi = S = 0; 2365 s0 = 0; 2366 2367 u.d = dd; 2368 if (word0(&u) & Sign_bit) { 2369 /* set sign for everything, including 0's and NaNs */ 2370 *sign = 1; 2371 word0(&u) &= ~Sign_bit; /* clear sign bit */ 2372 } 2373 else 2374 *sign = 0; 2375 2376 /* quick return for Infinities, NaNs and zeros */ 2377 if ((word0(&u) & Exp_mask) == Exp_mask) 2378 { 2379 /* Infinity or NaN */ 2380 *decpt = 9999; 2381 if (!word1(&u) && !(word0(&u) & 0xfffff)) 2382 return nrv_alloc("Infinity", rve, 8); 2383 return nrv_alloc("NaN", rve, 3); 2384 } 2385 if (!dval(&u)) { 2386 *decpt = 1; 2387 return nrv_alloc("0", rve, 1); 2388 } 2389 2390 /* compute k = floor(log10(d)). The computation may leave k 2391 one too large, but should never leave k too small. */ 2392 b = d2b(&u, &be, &bbits); 2393 if (b == NULL) 2394 goto failed_malloc; 2395 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) { 2396 dval(&d2) = dval(&u); 2397 word0(&d2) &= Frac_mask1; 2398 word0(&d2) |= Exp_11; 2399 2400 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 2401 * log10(x) = log(x) / log(10) 2402 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10)) 2403 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2) 2404 * 2405 * This suggests computing an approximation k to log10(d) by 2406 * 2407 * k = (i - Bias)*0.301029995663981 2408 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 ); 2409 * 2410 * We want k to be too large rather than too small. 2411 * The error in the first-order Taylor series approximation 2412 * is in our favor, so we just round up the constant enough 2413 * to compensate for any error in the multiplication of 2414 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077, 2415 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14, 2416 * adding 1e-13 to the constant term more than suffices. 2417 * Hence we adjust the constant term to 0.1760912590558. 2418 * (We could get a more accurate k by invoking log10, 2419 * but this is probably not worthwhile.) 2420 */ 2421 2422 i -= Bias; 2423 denorm = 0; 2424 } 2425 else { 2426 /* d is denormalized */ 2427 2428 i = bbits + be + (Bias + (P-1) - 1); 2429 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32) 2430 : word1(&u) << (32 - i); 2431 dval(&d2) = x; 2432 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */ 2433 i -= (Bias + (P-1) - 1) + 1; 2434 denorm = 1; 2435 } 2436 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 + 2437 i*0.301029995663981; 2438 k = (int)ds; 2439 if (ds < 0. && ds != k) 2440 k--; /* want k = floor(ds) */ 2441 k_check = 1; 2442 if (k >= 0 && k <= Ten_pmax) { 2443 if (dval(&u) < tens[k]) 2444 k--; 2445 k_check = 0; 2446 } 2447 j = bbits - i - 1; 2448 if (j >= 0) { 2449 b2 = 0; 2450 s2 = j; 2451 } 2452 else { 2453 b2 = -j; 2454 s2 = 0; 2455 } 2456 if (k >= 0) { 2457 b5 = 0; 2458 s5 = k; 2459 s2 += k; 2460 } 2461 else { 2462 b2 -= k; 2463 b5 = -k; 2464 s5 = 0; 2465 } 2466 if (mode < 0 || mode > 9) 2467 mode = 0; 2468 2469 try_quick = 1; 2470 2471 if (mode > 5) { 2472 mode -= 4; 2473 try_quick = 0; 2474 } 2475 leftright = 1; 2476 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */ 2477 /* silence erroneous "gcc -Wall" warning. */ 2478 switch(mode) { 2479 case 0: 2480 case 1: 2481 i = 18; 2482 ndigits = 0; 2483 break; 2484 case 2: 2485 leftright = 0; 2486 /* no break */ 2487 case 4: 2488 if (ndigits <= 0) 2489 ndigits = 1; 2490 ilim = ilim1 = i = ndigits; 2491 break; 2492 case 3: 2493 leftright = 0; 2494 /* no break */ 2495 case 5: 2496 i = ndigits + k + 1; 2497 ilim = i; 2498 ilim1 = i - 1; 2499 if (i <= 0) 2500 i = 1; 2501 } 2502 s0 = rv_alloc(i); 2503 if (s0 == NULL) 2504 goto failed_malloc; 2505 s = s0; 2506 2507 2508 if (ilim >= 0 && ilim <= Quick_max && try_quick) { 2509 2510 /* Try to get by with floating-point arithmetic. */ 2511 2512 i = 0; 2513 dval(&d2) = dval(&u); 2514 k0 = k; 2515 ilim0 = ilim; 2516 ieps = 2; /* conservative */ 2517 if (k > 0) { 2518 ds = tens[k&0xf]; 2519 j = k >> 4; 2520 if (j & Bletch) { 2521 /* prevent overflows */ 2522 j &= Bletch - 1; 2523 dval(&u) /= bigtens[n_bigtens-1]; 2524 ieps++; 2525 } 2526 for(; j; j >>= 1, i++) 2527 if (j & 1) { 2528 ieps++; 2529 ds *= bigtens[i]; 2530 } 2531 dval(&u) /= ds; 2532 } 2533 else if ((j1 = -k)) { 2534 dval(&u) *= tens[j1 & 0xf]; 2535 for(j = j1 >> 4; j; j >>= 1, i++) 2536 if (j & 1) { 2537 ieps++; 2538 dval(&u) *= bigtens[i]; 2539 } 2540 } 2541 if (k_check && dval(&u) < 1. && ilim > 0) { 2542 if (ilim1 <= 0) 2543 goto fast_failed; 2544 ilim = ilim1; 2545 k--; 2546 dval(&u) *= 10.; 2547 ieps++; 2548 } 2549 dval(&eps) = ieps*dval(&u) + 7.; 2550 word0(&eps) -= (P-1)*Exp_msk1; 2551 if (ilim == 0) { 2552 S = mhi = 0; 2553 dval(&u) -= 5.; 2554 if (dval(&u) > dval(&eps)) 2555 goto one_digit; 2556 if (dval(&u) < -dval(&eps)) 2557 goto no_digits; 2558 goto fast_failed; 2559 } 2560 if (leftright) { 2561 /* Use Steele & White method of only 2562 * generating digits needed. 2563 */ 2564 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps); 2565 for(i = 0;;) { 2566 L = (Long)dval(&u); 2567 dval(&u) -= L; 2568 *s++ = '0' + (int)L; 2569 if (dval(&u) < dval(&eps)) 2570 goto ret1; 2571 if (1. - dval(&u) < dval(&eps)) 2572 goto bump_up; 2573 if (++i >= ilim) 2574 break; 2575 dval(&eps) *= 10.; 2576 dval(&u) *= 10.; 2577 } 2578 } 2579 else { 2580 /* Generate ilim digits, then fix them up. */ 2581 dval(&eps) *= tens[ilim-1]; 2582 for(i = 1;; i++, dval(&u) *= 10.) { 2583 L = (Long)(dval(&u)); 2584 if (!(dval(&u) -= L)) 2585 ilim = i; 2586 *s++ = '0' + (int)L; 2587 if (i == ilim) { 2588 if (dval(&u) > 0.5 + dval(&eps)) 2589 goto bump_up; 2590 else if (dval(&u) < 0.5 - dval(&eps)) { 2591 while(*--s == '0'); 2592 s++; 2593 goto ret1; 2594 } 2595 break; 2596 } 2597 } 2598 } 2599 fast_failed: 2600 s = s0; 2601 dval(&u) = dval(&d2); 2602 k = k0; 2603 ilim = ilim0; 2604 } 2605 2606 /* Do we have a "small" integer? */ 2607 2608 if (be >= 0 && k <= Int_max) { 2609 /* Yes. */ 2610 ds = tens[k]; 2611 if (ndigits < 0 && ilim <= 0) { 2612 S = mhi = 0; 2613 if (ilim < 0 || dval(&u) <= 5*ds) 2614 goto no_digits; 2615 goto one_digit; 2616 } 2617 for(i = 1;; i++, dval(&u) *= 10.) { 2618 L = (Long)(dval(&u) / ds); 2619 dval(&u) -= L*ds; 2620 *s++ = '0' + (int)L; 2621 if (!dval(&u)) { 2622 break; 2623 } 2624 if (i == ilim) { 2625 dval(&u) += dval(&u); 2626 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) { 2627 bump_up: 2628 while(*--s == '9') 2629 if (s == s0) { 2630 k++; 2631 *s = '0'; 2632 break; 2633 } 2634 ++*s++; 2635 } 2636 break; 2637 } 2638 } 2639 goto ret1; 2640 } 2641 2642 m2 = b2; 2643 m5 = b5; 2644 if (leftright) { 2645 i = 2646 denorm ? be + (Bias + (P-1) - 1 + 1) : 2647 1 + P - bbits; 2648 b2 += i; 2649 s2 += i; 2650 mhi = i2b(1); 2651 if (mhi == NULL) 2652 goto failed_malloc; 2653 } 2654 if (m2 > 0 && s2 > 0) { 2655 i = m2 < s2 ? m2 : s2; 2656 b2 -= i; 2657 m2 -= i; 2658 s2 -= i; 2659 } 2660 if (b5 > 0) { 2661 if (leftright) { 2662 if (m5 > 0) { 2663 mhi = pow5mult(mhi, m5); 2664 if (mhi == NULL) 2665 goto failed_malloc; 2666 b1 = mult(mhi, b); 2667 Bfree(b); 2668 b = b1; 2669 if (b == NULL) 2670 goto failed_malloc; 2671 } 2672 if ((j = b5 - m5)) { 2673 b = pow5mult(b, j); 2674 if (b == NULL) 2675 goto failed_malloc; 2676 } 2677 } 2678 else { 2679 b = pow5mult(b, b5); 2680 if (b == NULL) 2681 goto failed_malloc; 2682 } 2683 } 2684 S = i2b(1); 2685 if (S == NULL) 2686 goto failed_malloc; 2687 if (s5 > 0) { 2688 S = pow5mult(S, s5); 2689 if (S == NULL) 2690 goto failed_malloc; 2691 } 2692 2693 /* Check for special case that d is a normalized power of 2. */ 2694 2695 spec_case = 0; 2696 if ((mode < 2 || leftright) 2697 ) { 2698 if (!word1(&u) && !(word0(&u) & Bndry_mask) 2699 && word0(&u) & (Exp_mask & ~Exp_msk1) 2700 ) { 2701 /* The special case */ 2702 b2 += Log2P; 2703 s2 += Log2P; 2704 spec_case = 1; 2705 } 2706 } 2707 2708 /* Arrange for convenient computation of quotients: 2709 * shift left if necessary so divisor has 4 leading 0 bits. 2710 * 2711 * Perhaps we should just compute leading 28 bits of S once 2712 * and for all and pass them and a shift to quorem, so it 2713 * can do shifts and ors to compute the numerator for q. 2714 */ 2715 #define iInc 28 2716 i = dshift(S, s2); 2717 b2 += i; 2718 m2 += i; 2719 s2 += i; 2720 if (b2 > 0) { 2721 b = lshift(b, b2); 2722 if (b == NULL) 2723 goto failed_malloc; 2724 } 2725 if (s2 > 0) { 2726 S = lshift(S, s2); 2727 if (S == NULL) 2728 goto failed_malloc; 2729 } 2730 if (k_check) { 2731 if (cmp(b,S) < 0) { 2732 k--; 2733 b = multadd(b, 10, 0); /* we botched the k estimate */ 2734 if (b == NULL) 2735 goto failed_malloc; 2736 if (leftright) { 2737 mhi = multadd(mhi, 10, 0); 2738 if (mhi == NULL) 2739 goto failed_malloc; 2740 } 2741 ilim = ilim1; 2742 } 2743 } 2744 if (ilim <= 0 && (mode == 3 || mode == 5)) { 2745 if (ilim < 0) { 2746 /* no digits, fcvt style */ 2747 no_digits: 2748 k = -1 - ndigits; 2749 goto ret; 2750 } 2751 else { 2752 S = multadd(S, 5, 0); 2753 if (S == NULL) 2754 goto failed_malloc; 2755 if (cmp(b, S) <= 0) 2756 goto no_digits; 2757 } 2758 one_digit: 2759 *s++ = '1'; 2760 k++; 2761 goto ret; 2762 } 2763 if (leftright) { 2764 if (m2 > 0) { 2765 mhi = lshift(mhi, m2); 2766 if (mhi == NULL) 2767 goto failed_malloc; 2768 } 2769 2770 /* Compute mlo -- check for special case 2771 * that d is a normalized power of 2. 2772 */ 2773 2774 mlo = mhi; 2775 if (spec_case) { 2776 mhi = Balloc(mhi->k); 2777 if (mhi == NULL) 2778 goto failed_malloc; 2779 Bcopy(mhi, mlo); 2780 mhi = lshift(mhi, Log2P); 2781 if (mhi == NULL) 2782 goto failed_malloc; 2783 } 2784 2785 for(i = 1;;i++) { 2786 dig = quorem(b,S) + '0'; 2787 /* Do we yet have the shortest decimal string 2788 * that will round to d? 2789 */ 2790 j = cmp(b, mlo); 2791 delta = diff(S, mhi); 2792 if (delta == NULL) 2793 goto failed_malloc; 2794 j1 = delta->sign ? 1 : cmp(b, delta); 2795 Bfree(delta); 2796 if (j1 == 0 && mode != 1 && !(word1(&u) & 1) 2797 ) { 2798 if (dig == '9') 2799 goto round_9_up; 2800 if (j > 0) 2801 dig++; 2802 *s++ = dig; 2803 goto ret; 2804 } 2805 if (j < 0 || (j == 0 && mode != 1 2806 && !(word1(&u) & 1) 2807 )) { 2808 if (!b->x[0] && b->wds <= 1) { 2809 goto accept_dig; 2810 } 2811 if (j1 > 0) { 2812 b = lshift(b, 1); 2813 if (b == NULL) 2814 goto failed_malloc; 2815 j1 = cmp(b, S); 2816 if ((j1 > 0 || (j1 == 0 && dig & 1)) 2817 && dig++ == '9') 2818 goto round_9_up; 2819 } 2820 accept_dig: 2821 *s++ = dig; 2822 goto ret; 2823 } 2824 if (j1 > 0) { 2825 if (dig == '9') { /* possible if i == 1 */ 2826 round_9_up: 2827 *s++ = '9'; 2828 goto roundoff; 2829 } 2830 *s++ = dig + 1; 2831 goto ret; 2832 } 2833 *s++ = dig; 2834 if (i == ilim) 2835 break; 2836 b = multadd(b, 10, 0); 2837 if (b == NULL) 2838 goto failed_malloc; 2839 if (mlo == mhi) { 2840 mlo = mhi = multadd(mhi, 10, 0); 2841 if (mlo == NULL) 2842 goto failed_malloc; 2843 } 2844 else { 2845 mlo = multadd(mlo, 10, 0); 2846 if (mlo == NULL) 2847 goto failed_malloc; 2848 mhi = multadd(mhi, 10, 0); 2849 if (mhi == NULL) 2850 goto failed_malloc; 2851 } 2852 } 2853 } 2854 else 2855 for(i = 1;; i++) { 2856 *s++ = dig = quorem(b,S) + '0'; 2857 if (!b->x[0] && b->wds <= 1) { 2858 goto ret; 2859 } 2860 if (i >= ilim) 2861 break; 2862 b = multadd(b, 10, 0); 2863 if (b == NULL) 2864 goto failed_malloc; 2865 } 2866 2867 /* Round off last digit */ 2868 2869 b = lshift(b, 1); 2870 if (b == NULL) 2871 goto failed_malloc; 2872 j = cmp(b, S); 2873 if (j > 0 || (j == 0 && dig & 1)) { 2874 roundoff: 2875 while(*--s == '9') 2876 if (s == s0) { 2877 k++; 2878 *s++ = '1'; 2879 goto ret; 2880 } 2881 ++*s++; 2882 } 2883 else { 2884 while(*--s == '0'); 2885 s++; 2886 } 2887 ret: 2888 Bfree(S); 2889 if (mhi) { 2890 if (mlo && mlo != mhi) 2891 Bfree(mlo); 2892 Bfree(mhi); 2893 } 2894 ret1: 2895 Bfree(b); 2896 *s = 0; 2897 *decpt = k + 1; 2898 if (rve) 2899 *rve = s; 2900 return s0; 2901 failed_malloc: 2902 if (S) 2903 Bfree(S); 2904 if (mlo && mlo != mhi) 2905 Bfree(mlo); 2906 if (mhi) 2907 Bfree(mhi); 2908 if (b) 2909 Bfree(b); 2910 if (s0) 2911 _Py_dg_freedtoa(s0); 2912 return NULL; 2913 } 2914 #ifdef __cplusplus 2915 } 2916 #endif 2917 2918 #endif /* PY_NO_SHORT_FLOAT_REPR */