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)
155typedef PY_UINT32_T ULong;
156typedef 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))
182static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
183
184#ifdef __cplusplus
185extern "C" {
186#endif
187
188typedef 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
287typedef struct BCinfo BCinfo;
288struct
289BCinfo {
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
319struct
320Bigint {
321    struct Bigint *next;
322    int k, maxwds, sign, wds;
323    ULong x[1];
324};
325
326typedef 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
349static Bigint *freelist[Kmax+1];
350
351/* Allocate space for a Bigint with up to 1<<k digits */
352
353static Bigint *
354Balloc(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
384static void
385Bfree(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
406static Bigint *
407Balloc(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
429static void
430Bfree(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
446static Bigint *
447multadd(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
500static Bigint *
501s2b(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
535static int
536hi0bits(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
567static int
568lo0bits(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
612static Bigint *
613i2b(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
628static Bigint *
629mult(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
729static 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
735static Bigint *
736pow5mult(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
791static Bigint *
792pow5mult(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
842static Bigint *
843lshift(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
889static int
890cmp(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
922static Bigint *
923diff(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
1002static double
1003ulp(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
1016static double
1017b2d(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
1072static Bigint *
1073sd2b(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
1130static Bigint *
1131d2b(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
1178static double
1179ratio(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
1196static const double
1197tens[] = {
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
1203static const double
1204bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
1205static 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
1219static int
1220dshift(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
1232static int
1233quorem(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
1333static double
1334sulp(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
1396static int
1397bigcomp(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
1506double
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
2260static char *
2261rv_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
2277static char *
2278nrv_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
2298void
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
2344char *
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