blob: de3ca9e4c742f94fd56b6cd1f4147429f3f8630f [file] [log] [blame]
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001/****************************************************************
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.
Mark Dickinson7f0ea322009-04-17 16:06:28 +000024 *
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:
Mark Dickinsonb08a53a2009-04-16 19:52:09 +000029 *
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 *
Mark Dickinson7f0ea322009-04-17 16:06:28 +000060 * 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 *
Mark Dickinson725bfd82009-05-03 20:33:40 +000064 * 7. _Py_dg_strtod has been modified so that it doesn't accept strings with
65 * leading whitespace.
66 *
Mark Dickinsonb08a53a2009-04-16 19:52:09 +000067 ***************************************************************/
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
Mark Dickinson81612e82010-01-12 23:04:19 +0000203/* maximum permitted exponent value for strtod; exponents larger than
204 MAX_ABS_EXP in absolute value get truncated to +-MAX_ABS_EXP. MAX_ABS_EXP
205 should fit into an int. */
206#ifndef MAX_ABS_EXP
207#define MAX_ABS_EXP 19999U
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000208#endif
209
210/* The following definition of Storeinc is appropriate for MIPS processors.
211 * An alternative that might be better on some machines is
212 * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
213 */
214#if defined(IEEE_8087)
215#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
216 ((unsigned short *)a)[0] = (unsigned short)c, a++)
217#else
218#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
219 ((unsigned short *)a)[1] = (unsigned short)c, a++)
220#endif
221
222/* #define P DBL_MANT_DIG */
223/* Ten_pmax = floor(P*log(2)/log(5)) */
224/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
225/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
226/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
227
228#define Exp_shift 20
229#define Exp_shift1 20
230#define Exp_msk1 0x100000
231#define Exp_msk11 0x100000
232#define Exp_mask 0x7ff00000
233#define P 53
234#define Nbits 53
235#define Bias 1023
236#define Emax 1023
237#define Emin (-1022)
238#define Exp_1 0x3ff00000
239#define Exp_11 0x3ff00000
240#define Ebits 11
241#define Frac_mask 0xfffff
242#define Frac_mask1 0xfffff
243#define Ten_pmax 22
244#define Bletch 0x10
245#define Bndry_mask 0xfffff
246#define Bndry_mask1 0xfffff
247#define LSB 1
248#define Sign_bit 0x80000000
249#define Log2P 1
250#define Tiny0 0
251#define Tiny1 1
252#define Quick_max 14
253#define Int_max 14
254
255#ifndef Flt_Rounds
256#ifdef FLT_ROUNDS
257#define Flt_Rounds FLT_ROUNDS
258#else
259#define Flt_Rounds 1
260#endif
261#endif /*Flt_Rounds*/
262
263#define Rounding Flt_Rounds
264
265#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
266#define Big1 0xffffffff
267
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000268/* struct BCinfo is used to pass information from _Py_dg_strtod to bigcomp */
269
270typedef struct BCinfo BCinfo;
271struct
272BCinfo {
Mark Dickinson853c3bb2010-01-14 15:37:49 +0000273 int dsign, e0, nd, nd0, scale;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000274};
275
276#define FFFFFFFF 0xffffffffUL
277
278#define Kmax 7
279
280/* struct Bigint is used to represent arbitrary-precision integers. These
281 integers are stored in sign-magnitude format, with the magnitude stored as
282 an array of base 2**32 digits. Bigints are always normalized: if x is a
283 Bigint then x->wds >= 1, and either x->wds == 1 or x[wds-1] is nonzero.
284
285 The Bigint fields are as follows:
286
287 - next is a header used by Balloc and Bfree to keep track of lists
288 of freed Bigints; it's also used for the linked list of
289 powers of 5 of the form 5**2**i used by pow5mult.
290 - k indicates which pool this Bigint was allocated from
291 - maxwds is the maximum number of words space was allocated for
292 (usually maxwds == 2**k)
293 - sign is 1 for negative Bigints, 0 for positive. The sign is unused
294 (ignored on inputs, set to 0 on outputs) in almost all operations
295 involving Bigints: a notable exception is the diff function, which
296 ignores signs on inputs but sets the sign of the output correctly.
297 - wds is the actual number of significant words
298 - x contains the vector of words (digits) for this Bigint, from least
299 significant (x[0]) to most significant (x[wds-1]).
300*/
301
302struct
303Bigint {
304 struct Bigint *next;
305 int k, maxwds, sign, wds;
306 ULong x[1];
307};
308
309typedef struct Bigint Bigint;
310
Mark Dickinsonde508002010-01-17 21:02:55 +0000311#ifndef Py_USING_MEMORY_DEBUGGER
312
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000313/* Memory management: memory is allocated from, and returned to, Kmax+1 pools
314 of memory, where pool k (0 <= k <= Kmax) is for Bigints b with b->maxwds ==
315 1 << k. These pools are maintained as linked lists, with freelist[k]
316 pointing to the head of the list for pool k.
317
318 On allocation, if there's no free slot in the appropriate pool, MALLOC is
319 called to get more memory. This memory is not returned to the system until
320 Python quits. There's also a private memory pool that's allocated from
321 in preference to using MALLOC.
322
323 For Bigints with more than (1 << Kmax) digits (which implies at least 1233
324 decimal digits), memory is directly allocated using MALLOC, and freed using
325 FREE.
326
327 XXX: it would be easy to bypass this memory-management system and
328 translate each call to Balloc into a call to PyMem_Malloc, and each
329 Bfree to PyMem_Free. Investigate whether this has any significant
330 performance on impact. */
331
332static Bigint *freelist[Kmax+1];
333
334/* Allocate space for a Bigint with up to 1<<k digits */
335
336static Bigint *
337Balloc(int k)
338{
339 int x;
340 Bigint *rv;
341 unsigned int len;
342
343 if (k <= Kmax && (rv = freelist[k]))
344 freelist[k] = rv->next;
345 else {
346 x = 1 << k;
347 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
348 /sizeof(double);
Mark Dickinson7f0ea322009-04-17 16:06:28 +0000349 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000350 rv = (Bigint*)pmem_next;
351 pmem_next += len;
352 }
353 else {
354 rv = (Bigint*)MALLOC(len*sizeof(double));
355 if (rv == NULL)
356 return NULL;
357 }
358 rv->k = k;
359 rv->maxwds = x;
360 }
361 rv->sign = rv->wds = 0;
362 return rv;
363}
364
365/* Free a Bigint allocated with Balloc */
366
367static void
368Bfree(Bigint *v)
369{
370 if (v) {
371 if (v->k > Kmax)
372 FREE((void*)v);
373 else {
374 v->next = freelist[v->k];
375 freelist[v->k] = v;
376 }
377 }
378}
379
Mark Dickinsonde508002010-01-17 21:02:55 +0000380#else
381
382/* Alternative versions of Balloc and Bfree that use PyMem_Malloc and
383 PyMem_Free directly in place of the custom memory allocation scheme above.
384 These are provided for the benefit of memory debugging tools like
385 Valgrind. */
386
387/* Allocate space for a Bigint with up to 1<<k digits */
388
389static Bigint *
390Balloc(int k)
391{
392 int x;
393 Bigint *rv;
394 unsigned int len;
395
396 x = 1 << k;
397 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
398 /sizeof(double);
399
400 rv = (Bigint*)MALLOC(len*sizeof(double));
401 if (rv == NULL)
402 return NULL;
403
404 rv->k = k;
405 rv->maxwds = x;
406 rv->sign = rv->wds = 0;
407 return rv;
408}
409
410/* Free a Bigint allocated with Balloc */
411
412static void
413Bfree(Bigint *v)
414{
415 if (v) {
416 FREE((void*)v);
417 }
418}
419
420#endif /* Py_USING_MEMORY_DEBUGGER */
421
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000422#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
423 y->wds*sizeof(Long) + 2*sizeof(int))
424
425/* Multiply a Bigint b by m and add a. Either modifies b in place and returns
426 a pointer to the modified b, or Bfrees b and returns a pointer to a copy.
427 On failure, return NULL. In this case, b will have been already freed. */
428
429static Bigint *
430multadd(Bigint *b, int m, int a) /* multiply by m and add a */
431{
432 int i, wds;
433#ifdef ULLong
434 ULong *x;
435 ULLong carry, y;
436#else
437 ULong carry, *x, y;
438 ULong xi, z;
439#endif
440 Bigint *b1;
441
442 wds = b->wds;
443 x = b->x;
444 i = 0;
445 carry = a;
446 do {
447#ifdef ULLong
448 y = *x * (ULLong)m + carry;
449 carry = y >> 32;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000450 *x++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000451#else
452 xi = *x;
453 y = (xi & 0xffff) * m + carry;
454 z = (xi >> 16) * m + (y >> 16);
455 carry = z >> 16;
456 *x++ = (z << 16) + (y & 0xffff);
457#endif
458 }
459 while(++i < wds);
460 if (carry) {
461 if (wds >= b->maxwds) {
462 b1 = Balloc(b->k+1);
463 if (b1 == NULL){
464 Bfree(b);
465 return NULL;
466 }
467 Bcopy(b1, b);
468 Bfree(b);
469 b = b1;
470 }
471 b->x[wds++] = (ULong)carry;
472 b->wds = wds;
473 }
474 return b;
475}
476
477/* convert a string s containing nd decimal digits (possibly containing a
478 decimal separator at position nd0, which is ignored) to a Bigint. This
479 function carries on where the parsing code in _Py_dg_strtod leaves off: on
480 entry, y9 contains the result of converting the first 9 digits. Returns
481 NULL on failure. */
482
483static Bigint *
Mark Dickinson853c3bb2010-01-14 15:37:49 +0000484s2b(const char *s, int nd0, int nd, ULong y9)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000485{
486 Bigint *b;
487 int i, k;
488 Long x, y;
489
490 x = (nd + 8) / 9;
491 for(k = 0, y = 1; x > y; y <<= 1, k++) ;
492 b = Balloc(k);
493 if (b == NULL)
494 return NULL;
495 b->x[0] = y9;
496 b->wds = 1;
497
Mark Dickinson853c3bb2010-01-14 15:37:49 +0000498 if (nd <= 9)
499 return b;
500
501 s += 9;
502 for (i = 9; i < nd0; i++) {
503 b = multadd(b, 10, *s++ - '0');
504 if (b == NULL)
505 return NULL;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000506 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +0000507 s++;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000508 for(; i < nd; i++) {
509 b = multadd(b, 10, *s++ - '0');
510 if (b == NULL)
511 return NULL;
512 }
513 return b;
514}
515
516/* count leading 0 bits in the 32-bit integer x. */
517
518static int
519hi0bits(ULong x)
520{
521 int k = 0;
522
523 if (!(x & 0xffff0000)) {
524 k = 16;
525 x <<= 16;
526 }
527 if (!(x & 0xff000000)) {
528 k += 8;
529 x <<= 8;
530 }
531 if (!(x & 0xf0000000)) {
532 k += 4;
533 x <<= 4;
534 }
535 if (!(x & 0xc0000000)) {
536 k += 2;
537 x <<= 2;
538 }
539 if (!(x & 0x80000000)) {
540 k++;
541 if (!(x & 0x40000000))
542 return 32;
543 }
544 return k;
545}
546
547/* count trailing 0 bits in the 32-bit integer y, and shift y right by that
548 number of bits. */
549
550static int
551lo0bits(ULong *y)
552{
553 int k;
554 ULong x = *y;
555
556 if (x & 7) {
557 if (x & 1)
558 return 0;
559 if (x & 2) {
560 *y = x >> 1;
561 return 1;
562 }
563 *y = x >> 2;
564 return 2;
565 }
566 k = 0;
567 if (!(x & 0xffff)) {
568 k = 16;
569 x >>= 16;
570 }
571 if (!(x & 0xff)) {
572 k += 8;
573 x >>= 8;
574 }
575 if (!(x & 0xf)) {
576 k += 4;
577 x >>= 4;
578 }
579 if (!(x & 0x3)) {
580 k += 2;
581 x >>= 2;
582 }
583 if (!(x & 1)) {
584 k++;
585 x >>= 1;
586 if (!x)
587 return 32;
588 }
589 *y = x;
590 return k;
591}
592
593/* convert a small nonnegative integer to a Bigint */
594
595static Bigint *
596i2b(int i)
597{
598 Bigint *b;
599
600 b = Balloc(1);
601 if (b == NULL)
602 return NULL;
603 b->x[0] = i;
604 b->wds = 1;
605 return b;
606}
607
608/* multiply two Bigints. Returns a new Bigint, or NULL on failure. Ignores
609 the signs of a and b. */
610
611static Bigint *
612mult(Bigint *a, Bigint *b)
613{
614 Bigint *c;
615 int k, wa, wb, wc;
616 ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
617 ULong y;
618#ifdef ULLong
619 ULLong carry, z;
620#else
621 ULong carry, z;
622 ULong z2;
623#endif
624
625 if (a->wds < b->wds) {
626 c = a;
627 a = b;
628 b = c;
629 }
630 k = a->k;
631 wa = a->wds;
632 wb = b->wds;
633 wc = wa + wb;
634 if (wc > a->maxwds)
635 k++;
636 c = Balloc(k);
637 if (c == NULL)
638 return NULL;
639 for(x = c->x, xa = x + wc; x < xa; x++)
640 *x = 0;
641 xa = a->x;
642 xae = xa + wa;
643 xb = b->x;
644 xbe = xb + wb;
645 xc0 = c->x;
646#ifdef ULLong
647 for(; xb < xbe; xc0++) {
648 if ((y = *xb++)) {
649 x = xa;
650 xc = xc0;
651 carry = 0;
652 do {
653 z = *x++ * (ULLong)y + *xc + carry;
654 carry = z >> 32;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000655 *xc++ = (ULong)(z & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000656 }
657 while(x < xae);
658 *xc = (ULong)carry;
659 }
660 }
661#else
662 for(; xb < xbe; xb++, xc0++) {
663 if (y = *xb & 0xffff) {
664 x = xa;
665 xc = xc0;
666 carry = 0;
667 do {
668 z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
669 carry = z >> 16;
670 z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
671 carry = z2 >> 16;
672 Storeinc(xc, z2, z);
673 }
674 while(x < xae);
675 *xc = carry;
676 }
677 if (y = *xb >> 16) {
678 x = xa;
679 xc = xc0;
680 carry = 0;
681 z2 = *xc;
682 do {
683 z = (*x & 0xffff) * y + (*xc >> 16) + carry;
684 carry = z >> 16;
685 Storeinc(xc, z, z2);
686 z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
687 carry = z2 >> 16;
688 }
689 while(x < xae);
690 *xc = z2;
691 }
692 }
693#endif
694 for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
695 c->wds = wc;
696 return c;
697}
698
Mark Dickinsonde508002010-01-17 21:02:55 +0000699#ifndef Py_USING_MEMORY_DEBUGGER
700
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000701/* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */
702
703static Bigint *p5s;
704
705/* multiply the Bigint b by 5**k. Returns a pointer to the result, or NULL on
706 failure; if the returned pointer is distinct from b then the original
707 Bigint b will have been Bfree'd. Ignores the sign of b. */
708
709static Bigint *
710pow5mult(Bigint *b, int k)
711{
712 Bigint *b1, *p5, *p51;
713 int i;
714 static int p05[3] = { 5, 25, 125 };
715
716 if ((i = k & 3)) {
717 b = multadd(b, p05[i-1], 0);
718 if (b == NULL)
719 return NULL;
720 }
721
722 if (!(k >>= 2))
723 return b;
724 p5 = p5s;
725 if (!p5) {
726 /* first time */
727 p5 = i2b(625);
728 if (p5 == NULL) {
729 Bfree(b);
730 return NULL;
731 }
732 p5s = p5;
733 p5->next = 0;
734 }
735 for(;;) {
736 if (k & 1) {
737 b1 = mult(b, p5);
738 Bfree(b);
739 b = b1;
740 if (b == NULL)
741 return NULL;
742 }
743 if (!(k >>= 1))
744 break;
745 p51 = p5->next;
746 if (!p51) {
747 p51 = mult(p5,p5);
748 if (p51 == NULL) {
749 Bfree(b);
750 return NULL;
751 }
752 p51->next = 0;
753 p5->next = p51;
754 }
755 p5 = p51;
756 }
757 return b;
758}
759
Mark Dickinsonde508002010-01-17 21:02:55 +0000760#else
761
762/* Version of pow5mult that doesn't cache powers of 5. Provided for
763 the benefit of memory debugging tools like Valgrind. */
764
765static Bigint *
766pow5mult(Bigint *b, int k)
767{
768 Bigint *b1, *p5, *p51;
769 int i;
770 static int p05[3] = { 5, 25, 125 };
771
772 if ((i = k & 3)) {
773 b = multadd(b, p05[i-1], 0);
774 if (b == NULL)
775 return NULL;
776 }
777
778 if (!(k >>= 2))
779 return b;
780 p5 = i2b(625);
781 if (p5 == NULL) {
782 Bfree(b);
783 return NULL;
784 }
785
786 for(;;) {
787 if (k & 1) {
788 b1 = mult(b, p5);
789 Bfree(b);
790 b = b1;
791 if (b == NULL) {
792 Bfree(p5);
793 return NULL;
794 }
795 }
796 if (!(k >>= 1))
797 break;
798 p51 = mult(p5, p5);
799 Bfree(p5);
800 p5 = p51;
801 if (p5 == NULL) {
802 Bfree(b);
803 return NULL;
804 }
805 }
806 Bfree(p5);
807 return b;
808}
809
810#endif /* Py_USING_MEMORY_DEBUGGER */
811
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000812/* shift a Bigint b left by k bits. Return a pointer to the shifted result,
813 or NULL on failure. If the returned pointer is distinct from b then the
814 original b will have been Bfree'd. Ignores the sign of b. */
815
816static Bigint *
817lshift(Bigint *b, int k)
818{
819 int i, k1, n, n1;
820 Bigint *b1;
821 ULong *x, *x1, *xe, z;
822
823 n = k >> 5;
824 k1 = b->k;
825 n1 = n + b->wds + 1;
826 for(i = b->maxwds; n1 > i; i <<= 1)
827 k1++;
828 b1 = Balloc(k1);
829 if (b1 == NULL) {
830 Bfree(b);
831 return NULL;
832 }
833 x1 = b1->x;
834 for(i = 0; i < n; i++)
835 *x1++ = 0;
836 x = b->x;
837 xe = x + b->wds;
838 if (k &= 0x1f) {
839 k1 = 32 - k;
840 z = 0;
841 do {
842 *x1++ = *x << k | z;
843 z = *x++ >> k1;
844 }
845 while(x < xe);
846 if ((*x1 = z))
847 ++n1;
848 }
849 else do
850 *x1++ = *x++;
851 while(x < xe);
852 b1->wds = n1 - 1;
853 Bfree(b);
854 return b1;
855}
856
857/* Do a three-way compare of a and b, returning -1 if a < b, 0 if a == b and
858 1 if a > b. Ignores signs of a and b. */
859
860static int
861cmp(Bigint *a, Bigint *b)
862{
863 ULong *xa, *xa0, *xb, *xb0;
864 int i, j;
865
866 i = a->wds;
867 j = b->wds;
868#ifdef DEBUG
869 if (i > 1 && !a->x[i-1])
870 Bug("cmp called with a->x[a->wds-1] == 0");
871 if (j > 1 && !b->x[j-1])
872 Bug("cmp called with b->x[b->wds-1] == 0");
873#endif
874 if (i -= j)
875 return i;
876 xa0 = a->x;
877 xa = xa0 + j;
878 xb0 = b->x;
879 xb = xb0 + j;
880 for(;;) {
881 if (*--xa != *--xb)
882 return *xa < *xb ? -1 : 1;
883 if (xa <= xa0)
884 break;
885 }
886 return 0;
887}
888
889/* Take the difference of Bigints a and b, returning a new Bigint. Returns
890 NULL on failure. The signs of a and b are ignored, but the sign of the
891 result is set appropriately. */
892
893static Bigint *
894diff(Bigint *a, Bigint *b)
895{
896 Bigint *c;
897 int i, wa, wb;
898 ULong *xa, *xae, *xb, *xbe, *xc;
899#ifdef ULLong
900 ULLong borrow, y;
901#else
902 ULong borrow, y;
903 ULong z;
904#endif
905
906 i = cmp(a,b);
907 if (!i) {
908 c = Balloc(0);
909 if (c == NULL)
910 return NULL;
911 c->wds = 1;
912 c->x[0] = 0;
913 return c;
914 }
915 if (i < 0) {
916 c = a;
917 a = b;
918 b = c;
919 i = 1;
920 }
921 else
922 i = 0;
923 c = Balloc(a->k);
924 if (c == NULL)
925 return NULL;
926 c->sign = i;
927 wa = a->wds;
928 xa = a->x;
929 xae = xa + wa;
930 wb = b->wds;
931 xb = b->x;
932 xbe = xb + wb;
933 xc = c->x;
934 borrow = 0;
935#ifdef ULLong
936 do {
937 y = (ULLong)*xa++ - *xb++ - borrow;
938 borrow = y >> 32 & (ULong)1;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000939 *xc++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000940 }
941 while(xb < xbe);
942 while(xa < xae) {
943 y = *xa++ - borrow;
944 borrow = y >> 32 & (ULong)1;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000945 *xc++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000946 }
947#else
948 do {
949 y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
950 borrow = (y & 0x10000) >> 16;
951 z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
952 borrow = (z & 0x10000) >> 16;
953 Storeinc(xc, z, y);
954 }
955 while(xb < xbe);
956 while(xa < xae) {
957 y = (*xa & 0xffff) - borrow;
958 borrow = (y & 0x10000) >> 16;
959 z = (*xa++ >> 16) - borrow;
960 borrow = (z & 0x10000) >> 16;
961 Storeinc(xc, z, y);
962 }
963#endif
964 while(!*--xc)
965 wa--;
966 c->wds = wa;
967 return c;
968}
969
970/* Given a positive normal double x, return the difference between x and the next
971 double up. Doesn't give correct results for subnormals. */
972
973static double
974ulp(U *x)
975{
976 Long L;
977 U u;
978
979 L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
980 word0(&u) = L;
981 word1(&u) = 0;
982 return dval(&u);
983}
984
985/* Convert a Bigint to a double plus an exponent */
986
987static double
988b2d(Bigint *a, int *e)
989{
990 ULong *xa, *xa0, w, y, z;
991 int k;
992 U d;
993
994 xa0 = a->x;
995 xa = xa0 + a->wds;
996 y = *--xa;
997#ifdef DEBUG
998 if (!y) Bug("zero y in b2d");
999#endif
1000 k = hi0bits(y);
1001 *e = 32 - k;
1002 if (k < Ebits) {
1003 word0(&d) = Exp_1 | y >> (Ebits - k);
1004 w = xa > xa0 ? *--xa : 0;
1005 word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
1006 goto ret_d;
1007 }
1008 z = xa > xa0 ? *--xa : 0;
1009 if (k -= Ebits) {
1010 word0(&d) = Exp_1 | y << k | z >> (32 - k);
1011 y = xa > xa0 ? *--xa : 0;
1012 word1(&d) = z << k | y >> (32 - k);
1013 }
1014 else {
1015 word0(&d) = Exp_1 | y;
1016 word1(&d) = z;
1017 }
1018 ret_d:
1019 return dval(&d);
1020}
1021
1022/* Convert a double to a Bigint plus an exponent. Return NULL on failure.
1023
1024 Given a finite nonzero double d, return an odd Bigint b and exponent *e
1025 such that fabs(d) = b * 2**e. On return, *bbits gives the number of
Mark Dickinson180e4cd2010-01-04 21:33:31 +00001026 significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001027
1028 If d is zero, then b == 0, *e == -1010, *bbits = 0.
1029 */
1030
1031
1032static Bigint *
1033d2b(U *d, int *e, int *bits)
1034{
1035 Bigint *b;
1036 int de, k;
1037 ULong *x, y, z;
1038 int i;
1039
1040 b = Balloc(1);
1041 if (b == NULL)
1042 return NULL;
1043 x = b->x;
1044
1045 z = word0(d) & Frac_mask;
1046 word0(d) &= 0x7fffffff; /* clear sign bit, which we ignore */
1047 if ((de = (int)(word0(d) >> Exp_shift)))
1048 z |= Exp_msk1;
1049 if ((y = word1(d))) {
1050 if ((k = lo0bits(&y))) {
1051 x[0] = y | z << (32 - k);
1052 z >>= k;
1053 }
1054 else
1055 x[0] = y;
1056 i =
1057 b->wds = (x[1] = z) ? 2 : 1;
1058 }
1059 else {
1060 k = lo0bits(&z);
1061 x[0] = z;
1062 i =
1063 b->wds = 1;
1064 k += 32;
1065 }
1066 if (de) {
1067 *e = de - Bias - (P-1) + k;
1068 *bits = P - k;
1069 }
1070 else {
1071 *e = de - Bias - (P-1) + 1 + k;
1072 *bits = 32*i - hi0bits(x[i-1]);
1073 }
1074 return b;
1075}
1076
1077/* Compute the ratio of two Bigints, as a double. The result may have an
1078 error of up to 2.5 ulps. */
1079
1080static double
1081ratio(Bigint *a, Bigint *b)
1082{
1083 U da, db;
1084 int k, ka, kb;
1085
1086 dval(&da) = b2d(a, &ka);
1087 dval(&db) = b2d(b, &kb);
1088 k = ka - kb + 32*(a->wds - b->wds);
1089 if (k > 0)
1090 word0(&da) += k*Exp_msk1;
1091 else {
1092 k = -k;
1093 word0(&db) += k*Exp_msk1;
1094 }
1095 return dval(&da) / dval(&db);
1096}
1097
1098static const double
1099tens[] = {
1100 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
1101 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
1102 1e20, 1e21, 1e22
1103};
1104
1105static const double
1106bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
1107static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
1108 9007199254740992.*9007199254740992.e-256
1109 /* = 2^106 * 1e-256 */
1110};
1111/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
1112/* flag unnecessarily. It leads to a song and dance at the end of strtod. */
1113#define Scale_Bit 0x10
1114#define n_bigtens 5
1115
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001116#define ULbits 32
1117#define kshift 5
1118#define kmask 31
1119
1120
1121static int
1122dshift(Bigint *b, int p2)
1123{
1124 int rv = hi0bits(b->x[b->wds-1]) - 4;
1125 if (p2 > 0)
1126 rv -= p2;
1127 return rv & kmask;
1128}
1129
1130/* special case of Bigint division. The quotient is always in the range 0 <=
1131 quotient < 10, and on entry the divisor S is normalized so that its top 4
1132 bits (28--31) are zero and bit 27 is set. */
1133
1134static int
1135quorem(Bigint *b, Bigint *S)
1136{
1137 int n;
1138 ULong *bx, *bxe, q, *sx, *sxe;
1139#ifdef ULLong
1140 ULLong borrow, carry, y, ys;
1141#else
1142 ULong borrow, carry, y, ys;
1143 ULong si, z, zs;
1144#endif
1145
1146 n = S->wds;
1147#ifdef DEBUG
1148 /*debug*/ if (b->wds > n)
1149 /*debug*/ Bug("oversize b in quorem");
1150#endif
1151 if (b->wds < n)
1152 return 0;
1153 sx = S->x;
1154 sxe = sx + --n;
1155 bx = b->x;
1156 bxe = bx + n;
1157 q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
1158#ifdef DEBUG
1159 /*debug*/ if (q > 9)
1160 /*debug*/ Bug("oversized quotient in quorem");
1161#endif
1162 if (q) {
1163 borrow = 0;
1164 carry = 0;
1165 do {
1166#ifdef ULLong
1167 ys = *sx++ * (ULLong)q + carry;
1168 carry = ys >> 32;
1169 y = *bx - (ys & FFFFFFFF) - borrow;
1170 borrow = y >> 32 & (ULong)1;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +00001171 *bx++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001172#else
1173 si = *sx++;
1174 ys = (si & 0xffff) * q + carry;
1175 zs = (si >> 16) * q + (ys >> 16);
1176 carry = zs >> 16;
1177 y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
1178 borrow = (y & 0x10000) >> 16;
1179 z = (*bx >> 16) - (zs & 0xffff) - borrow;
1180 borrow = (z & 0x10000) >> 16;
1181 Storeinc(bx, z, y);
1182#endif
1183 }
1184 while(sx <= sxe);
1185 if (!*bxe) {
1186 bx = b->x;
1187 while(--bxe > bx && !*bxe)
1188 --n;
1189 b->wds = n;
1190 }
1191 }
1192 if (cmp(b, S) >= 0) {
1193 q++;
1194 borrow = 0;
1195 carry = 0;
1196 bx = b->x;
1197 sx = S->x;
1198 do {
1199#ifdef ULLong
1200 ys = *sx++ + carry;
1201 carry = ys >> 32;
1202 y = *bx - (ys & FFFFFFFF) - borrow;
1203 borrow = y >> 32 & (ULong)1;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +00001204 *bx++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001205#else
1206 si = *sx++;
1207 ys = (si & 0xffff) + carry;
1208 zs = (si >> 16) + (ys >> 16);
1209 carry = zs >> 16;
1210 y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
1211 borrow = (y & 0x10000) >> 16;
1212 z = (*bx >> 16) - (zs & 0xffff) - borrow;
1213 borrow = (z & 0x10000) >> 16;
1214 Storeinc(bx, z, y);
1215#endif
1216 }
1217 while(sx <= sxe);
1218 bx = b->x;
1219 bxe = bx + n;
1220 if (!*bxe) {
1221 while(--bxe > bx && !*bxe)
1222 --n;
1223 b->wds = n;
1224 }
1225 }
1226 return q;
1227}
1228
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001229/* sulp(x) is a version of ulp(x) that takes bc.scale into account.
Mark Dickinson81612e82010-01-12 23:04:19 +00001230
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001231 Assuming that x is finite and nonnegative (positive zero is fine
1232 here) and x / 2^bc.scale is exactly representable as a double,
1233 sulp(x) is equivalent to 2^bc.scale * ulp(x / 2^bc.scale). */
Mark Dickinson81612e82010-01-12 23:04:19 +00001234
1235static double
1236sulp(U *x, BCinfo *bc)
1237{
1238 U u;
1239
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001240 if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00001241 /* rv/2^bc->scale is subnormal */
1242 word0(&u) = (P+2)*Exp_msk1;
1243 word1(&u) = 0;
1244 return u.d;
1245 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001246 else {
1247 assert(word0(x) || word1(x)); /* x != 0.0 */
Mark Dickinson81612e82010-01-12 23:04:19 +00001248 return ulp(x);
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001249 }
Mark Dickinson81612e82010-01-12 23:04:19 +00001250}
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001251
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001252/* The bigcomp function handles some hard cases for strtod, for inputs
1253 with more than STRTOD_DIGLIM digits. It's called once an initial
1254 estimate for the double corresponding to the input string has
1255 already been obtained by the code in _Py_dg_strtod.
1256
1257 The bigcomp function is only called after _Py_dg_strtod has found a
1258 double value rv such that either rv or rv + 1ulp represents the
1259 correctly rounded value corresponding to the original string. It
1260 determines which of these two values is the correct one by
1261 computing the decimal digits of rv + 0.5ulp and comparing them with
1262 the corresponding digits of s0.
1263
1264 In the following, write dv for the absolute value of the number represented
1265 by the input string.
1266
1267 Inputs:
1268
1269 s0 points to the first significant digit of the input string.
1270
1271 rv is a (possibly scaled) estimate for the closest double value to the
1272 value represented by the original input to _Py_dg_strtod. If
1273 bc->scale is nonzero, then rv/2^(bc->scale) is the approximation to
1274 the input value.
1275
1276 bc is a struct containing information gathered during the parsing and
1277 estimation steps of _Py_dg_strtod. Description of fields follows:
1278
1279 bc->dsign is 1 if rv < decimal value, 0 if rv >= decimal value. In
1280 normal use, it should almost always be 1 when bigcomp is entered.
1281
1282 bc->e0 gives the exponent of the input value, such that dv = (integer
1283 given by the bd->nd digits of s0) * 10**e0
1284
1285 bc->nd gives the total number of significant digits of s0. It will
1286 be at least 1.
1287
1288 bc->nd0 gives the number of significant digits of s0 before the
1289 decimal separator. If there's no decimal separator, bc->nd0 ==
1290 bc->nd.
1291
1292 bc->scale is the value used to scale rv to avoid doing arithmetic with
1293 subnormal values. It's either 0 or 2*P (=106).
1294
1295 Outputs:
1296
1297 On successful exit, rv/2^(bc->scale) is the closest double to dv.
1298
1299 Returns 0 on success, -1 on failure (e.g., due to a failed malloc call). */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001300
1301static int
1302bigcomp(U *rv, const char *s0, BCinfo *bc)
1303{
1304 Bigint *b, *d;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001305 int b2, bbits, d2, dd, i, nd, nd0, odd, p2, p5;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001306
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001307 dd = 0; /* silence compiler warning about possibly unused variable */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001308 nd = bc->nd;
1309 nd0 = bc->nd0;
Mark Dickinson81612e82010-01-12 23:04:19 +00001310 p5 = nd + bc->e0;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001311 if (rv->d == 0.) {
1312 /* special case because d2b doesn't handle 0.0 */
1313 b = i2b(0);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001314 if (b == NULL)
1315 return -1;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001316 p2 = Emin - P + 1; /* = -1074 for IEEE 754 binary64 */
1317 bbits = 0;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001318 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001319 else {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001320 b = d2b(rv, &p2, &bbits);
1321 if (b == NULL)
1322 return -1;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001323 p2 -= bc->scale;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001324 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001325 /* now rv/2^(bc->scale) = b * 2**p2, and b has bbits significant bits */
1326
1327 /* Replace (b, p2) by (b << i, p2 - i), with i the largest integer such
1328 that b << i has at most P significant bits and p2 - i >= Emin - P +
1329 1. */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001330 i = P - bbits;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001331 if (i > p2 - (Emin - P + 1))
1332 i = p2 - (Emin - P + 1);
1333 /* increment i so that we shift b by an extra bit; then or-ing a 1 into
1334 the lsb of b gives us rv/2^(bc->scale) + 0.5ulp. */
1335 b = lshift(b, ++i);
1336 if (b == NULL)
1337 return -1;
1338 /* record whether the lsb of rv/2^(bc->scale) is odd: in the exact halfway
1339 case, this is used for round to even. */
1340 odd = b->x[0] & 2;
1341 b->x[0] |= 1;
1342
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001343 p2 -= p5 + i;
1344 d = i2b(1);
1345 if (d == NULL) {
1346 Bfree(b);
1347 return -1;
1348 }
1349 /* Arrange for convenient computation of quotients:
1350 * shift left if necessary so divisor has 4 leading 0 bits.
1351 */
1352 if (p5 > 0) {
1353 d = pow5mult(d, p5);
1354 if (d == NULL) {
1355 Bfree(b);
1356 return -1;
1357 }
1358 }
1359 else if (p5 < 0) {
1360 b = pow5mult(b, -p5);
1361 if (b == NULL) {
1362 Bfree(d);
1363 return -1;
1364 }
1365 }
1366 if (p2 > 0) {
1367 b2 = p2;
1368 d2 = 0;
1369 }
1370 else {
1371 b2 = 0;
1372 d2 = -p2;
1373 }
1374 i = dshift(d, d2);
1375 if ((b2 += i) > 0) {
1376 b = lshift(b, b2);
1377 if (b == NULL) {
1378 Bfree(d);
1379 return -1;
1380 }
1381 }
1382 if ((d2 += i) > 0) {
1383 d = lshift(d, d2);
1384 if (d == NULL) {
1385 Bfree(b);
1386 return -1;
1387 }
1388 }
1389
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001390 /* if b >= d, round down */
Mark Dickinson81612e82010-01-12 23:04:19 +00001391 if (cmp(b, d) >= 0) {
1392 dd = -1;
1393 goto ret;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001394 }
1395
1396 /* Compare b/d with s0 */
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001397 for(i = 0; i < nd0; i++) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001398 b = multadd(b, 10, 0);
1399 if (b == NULL) {
1400 Bfree(d);
1401 return -1;
1402 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001403 dd = *s0++ - '0' - quorem(b, d);
1404 if (dd)
1405 goto ret;
1406 if (!b->x[0] && b->wds == 1) {
1407 if (i < nd - 1)
1408 dd = 1;
1409 goto ret;
1410 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001411 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001412 s0++;
1413 for(; i < nd; i++) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001414 b = multadd(b, 10, 0);
1415 if (b == NULL) {
1416 Bfree(d);
1417 return -1;
1418 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001419 dd = *s0++ - '0' - quorem(b, d);
1420 if (dd)
1421 goto ret;
1422 if (!b->x[0] && b->wds == 1) {
1423 if (i < nd - 1)
1424 dd = 1;
1425 goto ret;
1426 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001427 }
1428 if (b->x[0] || b->wds > 1)
1429 dd = -1;
1430 ret:
1431 Bfree(b);
1432 Bfree(d);
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001433 if (dd > 0 || (dd == 0 && odd))
1434 dval(rv) += sulp(rv, bc);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001435 return 0;
1436}
1437
1438double
1439_Py_dg_strtod(const char *s00, char **se)
1440{
Mark Dickinson45b63652010-01-16 18:10:25 +00001441 int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, e, e1, error;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001442 int esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
1443 const char *s, *s0, *s1;
1444 double aadj, aadj1;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001445 U aadj2, adj, rv, rv0;
Mark Dickinson45b63652010-01-16 18:10:25 +00001446 ULong y, z, abse;
1447 Long L;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001448 BCinfo bc;
1449 Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1450
Mark Dickinson45b63652010-01-16 18:10:25 +00001451 sign = nz0 = nz = 0;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001452 dval(&rv) = 0.;
1453 for(s = s00;;s++) switch(*s) {
1454 case '-':
1455 sign = 1;
1456 /* no break */
1457 case '+':
1458 if (*++s)
1459 goto break2;
1460 /* no break */
1461 case 0:
1462 goto ret0;
Mark Dickinson725bfd82009-05-03 20:33:40 +00001463 /* modify original dtoa.c so that it doesn't accept leading whitespace
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001464 case '\t':
1465 case '\n':
1466 case '\v':
1467 case '\f':
1468 case '\r':
1469 case ' ':
1470 continue;
Mark Dickinson725bfd82009-05-03 20:33:40 +00001471 */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001472 default:
1473 goto break2;
1474 }
1475 break2:
1476 if (*s == '0') {
1477 nz0 = 1;
1478 while(*++s == '0') ;
1479 if (!*s)
1480 goto ret;
1481 }
1482 s0 = s;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001483 for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
Mark Dickinson45b63652010-01-16 18:10:25 +00001484 ;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001485 nd0 = nd;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001486 if (c == '.') {
1487 c = *++s;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001488 if (!nd) {
1489 for(; c == '0'; c = *++s)
1490 nz++;
1491 if (c > '0' && c <= '9') {
1492 s0 = s;
1493 nf += nz;
1494 nz = 0;
1495 goto have_dig;
1496 }
1497 goto dig_done;
1498 }
1499 for(; c >= '0' && c <= '9'; c = *++s) {
1500 have_dig:
1501 nz++;
1502 if (c -= '0') {
1503 nf += nz;
Mark Dickinson45b63652010-01-16 18:10:25 +00001504 nd += nz;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001505 nz = 0;
1506 }
1507 }
1508 }
1509 dig_done:
1510 e = 0;
1511 if (c == 'e' || c == 'E') {
1512 if (!nd && !nz && !nz0) {
1513 goto ret0;
1514 }
1515 s00 = s;
1516 esign = 0;
1517 switch(c = *++s) {
1518 case '-':
1519 esign = 1;
1520 case '+':
1521 c = *++s;
1522 }
1523 if (c >= '0' && c <= '9') {
1524 while(c == '0')
1525 c = *++s;
1526 if (c > '0' && c <= '9') {
Mark Dickinson45b63652010-01-16 18:10:25 +00001527 abse = c - '0';
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001528 s1 = s;
1529 while((c = *++s) >= '0' && c <= '9')
Mark Dickinson45b63652010-01-16 18:10:25 +00001530 abse = 10*abse + c - '0';
1531 if (s - s1 > 8 || abse > MAX_ABS_EXP)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001532 /* Avoid confusion from exponents
1533 * so large that e might overflow.
1534 */
Mark Dickinson81612e82010-01-12 23:04:19 +00001535 e = (int)MAX_ABS_EXP; /* safe for 16 bit ints */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001536 else
Mark Dickinson45b63652010-01-16 18:10:25 +00001537 e = (int)abse;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001538 if (esign)
1539 e = -e;
1540 }
1541 else
1542 e = 0;
1543 }
1544 else
1545 s = s00;
1546 }
1547 if (!nd) {
1548 if (!nz && !nz0) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001549 ret0:
1550 s = s00;
1551 sign = 0;
1552 }
1553 goto ret;
1554 }
Mark Dickinson45b63652010-01-16 18:10:25 +00001555 e -= nf;
1556 if (!nd0)
1557 nd0 = nd;
1558
1559 /* strip trailing zeros */
1560 for (i = nd; i > 0; ) {
1561 /* scan back until we hit a nonzero digit. significant digit 'i'
1562 is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
1563 --i;
1564 if (s0[i < nd0 ? i : i+1] != '0') {
1565 ++i;
1566 break;
1567 }
1568 }
1569 e += nd - i;
1570 nd = i;
1571 if (nd0 > nd)
1572 nd0 = nd;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001573
1574 /* Now we have nd0 digits, starting at s0, followed by a
1575 * decimal point, followed by nd-nd0 digits. The number we're
1576 * after is the integer represented by those digits times
1577 * 10**e */
1578
Mark Dickinson45b63652010-01-16 18:10:25 +00001579 bc.e0 = e1 = e;
1580
1581 /* Summary of parsing results. The parsing stage gives values
1582 * s0, nd0, nd, e, sign, where:
1583 *
1584 * - s0 points to the first significant digit of the input string s00;
1585 *
1586 * - nd is the total number of significant digits (here, and
1587 * below, 'significant digits' means the set of digits of the
1588 * significand of the input that remain after ignoring leading
1589 * and trailing zeros.
1590 *
1591 * - nd0 indicates the position of the decimal point (if
1592 * present): so the nd significant digits are in s0[0:nd0] and
1593 * s0[nd0+1:nd+1] using the usual Python half-open slice
1594 * notation. (If nd0 < nd, then s0[nd0] necessarily contains
1595 * a '.' character; if nd0 == nd, then it could be anything.)
1596 *
1597 * - e is the adjusted exponent: the absolute value of the number
1598 * represented by the original input string is n * 10**e, where
1599 * n is the integer represented by the concatenation of
1600 * s0[0:nd0] and s0[nd0+1:nd+1]
1601 *
1602 * - sign gives the sign of the input: 1 for negative, 0 for positive
1603 *
1604 * - the first and last significant digits are nonzero
1605 */
1606
1607 /* put first DBL_DIG+1 digits into integer y and z.
1608 *
1609 * - y contains the value represented by the first min(9, nd)
1610 * significant digits
1611 *
1612 * - if nd > 9, z contains the value represented by significant digits
1613 * with indices in [9, min(16, nd)). So y * 10**(min(16, nd) - 9) + z
1614 * gives the value represented by the first min(16, nd) sig. digits.
1615 */
1616
1617 y = z = 0;
1618 for (i = 0; i < nd; i++) {
1619 if (i < 9)
1620 y = 10*y + s0[i < nd0 ? i : i+1] - '0';
1621 else if (i < DBL_DIG+1)
1622 z = 10*z + s0[i < nd0 ? i : i+1] - '0';
1623 else
1624 break;
1625 }
1626
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001627 k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1628 dval(&rv) = y;
1629 if (k > 9) {
1630 dval(&rv) = tens[k - 9] * dval(&rv) + z;
1631 }
1632 bd0 = 0;
1633 if (nd <= DBL_DIG
1634 && Flt_Rounds == 1
1635 ) {
1636 if (!e)
1637 goto ret;
1638 if (e > 0) {
1639 if (e <= Ten_pmax) {
1640 dval(&rv) *= tens[e];
1641 goto ret;
1642 }
1643 i = DBL_DIG - nd;
1644 if (e <= Ten_pmax + i) {
1645 /* A fancier test would sometimes let us do
1646 * this for larger i values.
1647 */
1648 e -= i;
1649 dval(&rv) *= tens[i];
1650 dval(&rv) *= tens[e];
1651 goto ret;
1652 }
1653 }
1654 else if (e >= -Ten_pmax) {
1655 dval(&rv) /= tens[-e];
1656 goto ret;
1657 }
1658 }
1659 e1 += nd - k;
1660
1661 bc.scale = 0;
1662
1663 /* Get starting approximation = rv * 10**e1 */
1664
1665 if (e1 > 0) {
1666 if ((i = e1 & 15))
1667 dval(&rv) *= tens[i];
1668 if (e1 &= ~15) {
1669 if (e1 > DBL_MAX_10_EXP) {
1670 ovfl:
1671 errno = ERANGE;
1672 /* Can't trust HUGE_VAL */
1673 word0(&rv) = Exp_mask;
1674 word1(&rv) = 0;
1675 goto ret;
1676 }
1677 e1 >>= 4;
1678 for(j = 0; e1 > 1; j++, e1 >>= 1)
1679 if (e1 & 1)
1680 dval(&rv) *= bigtens[j];
1681 /* The last multiplication could overflow. */
1682 word0(&rv) -= P*Exp_msk1;
1683 dval(&rv) *= bigtens[j];
1684 if ((z = word0(&rv) & Exp_mask)
1685 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1686 goto ovfl;
1687 if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1688 /* set to largest number */
1689 /* (Can't trust DBL_MAX) */
1690 word0(&rv) = Big0;
1691 word1(&rv) = Big1;
1692 }
1693 else
1694 word0(&rv) += P*Exp_msk1;
1695 }
1696 }
1697 else if (e1 < 0) {
1698 e1 = -e1;
1699 if ((i = e1 & 15))
1700 dval(&rv) /= tens[i];
1701 if (e1 >>= 4) {
1702 if (e1 >= 1 << n_bigtens)
1703 goto undfl;
1704 if (e1 & Scale_Bit)
1705 bc.scale = 2*P;
1706 for(j = 0; e1 > 0; j++, e1 >>= 1)
1707 if (e1 & 1)
1708 dval(&rv) *= tinytens[j];
1709 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1710 >> Exp_shift)) > 0) {
1711 /* scaled rv is denormal; clear j low bits */
1712 if (j >= 32) {
1713 word1(&rv) = 0;
1714 if (j >= 53)
1715 word0(&rv) = (P+2)*Exp_msk1;
1716 else
1717 word0(&rv) &= 0xffffffff << (j-32);
1718 }
1719 else
1720 word1(&rv) &= 0xffffffff << j;
1721 }
1722 if (!dval(&rv)) {
1723 undfl:
1724 dval(&rv) = 0.;
1725 errno = ERANGE;
1726 goto ret;
1727 }
1728 }
1729 }
1730
1731 /* Now the hard part -- adjusting rv to the correct value.*/
1732
1733 /* Put digits into bd: true value = bd * 10^e */
1734
1735 bc.nd = nd;
Mark Dickinson81612e82010-01-12 23:04:19 +00001736 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001737 /* to silence an erroneous warning about bc.nd0 */
1738 /* possibly not being initialized. */
Mark Dickinson81612e82010-01-12 23:04:19 +00001739 if (nd > STRTOD_DIGLIM) {
1740 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001741 /* minimum number of decimal digits to distinguish double values */
1742 /* in IEEE arithmetic. */
Mark Dickinson45b63652010-01-16 18:10:25 +00001743
1744 /* Truncate input to 18 significant digits, then discard any trailing
1745 zeros on the result by updating nd, nd0, e and y suitably. (There's
1746 no need to update z; it's not reused beyond this point.) */
1747 for (i = 18; i > 0; ) {
1748 /* scan back until we hit a nonzero digit. significant digit 'i'
1749 is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001750 --i;
Mark Dickinson45b63652010-01-16 18:10:25 +00001751 if (s0[i < nd0 ? i : i+1] != '0') {
1752 ++i;
1753 break;
1754 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001755 }
1756 e += nd - i;
1757 nd = i;
1758 if (nd0 > nd)
1759 nd0 = nd;
1760 if (nd < 9) { /* must recompute y */
1761 y = 0;
1762 for(i = 0; i < nd0; ++i)
1763 y = 10*y + s0[i] - '0';
Mark Dickinson45b63652010-01-16 18:10:25 +00001764 for(; i < nd; ++i)
1765 y = 10*y + s0[i+1] - '0';
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001766 }
1767 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001768 bd0 = s2b(s0, nd0, nd, y);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001769 if (bd0 == NULL)
1770 goto failed_malloc;
1771
1772 for(;;) {
1773 bd = Balloc(bd0->k);
1774 if (bd == NULL) {
1775 Bfree(bd0);
1776 goto failed_malloc;
1777 }
1778 Bcopy(bd, bd0);
1779 bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
1780 if (bb == NULL) {
1781 Bfree(bd);
1782 Bfree(bd0);
1783 goto failed_malloc;
1784 }
1785 bs = i2b(1);
1786 if (bs == NULL) {
1787 Bfree(bb);
1788 Bfree(bd);
1789 Bfree(bd0);
1790 goto failed_malloc;
1791 }
1792
1793 if (e >= 0) {
1794 bb2 = bb5 = 0;
1795 bd2 = bd5 = e;
1796 }
1797 else {
1798 bb2 = bb5 = -e;
1799 bd2 = bd5 = 0;
1800 }
1801 if (bbe >= 0)
1802 bb2 += bbe;
1803 else
1804 bd2 -= bbe;
1805 bs2 = bb2;
1806 j = bbe - bc.scale;
1807 i = j + bbbits - 1; /* logb(rv) */
1808 if (i < Emin) /* denormal */
1809 j += P - Emin;
1810 else
1811 j = P + 1 - bbbits;
1812 bb2 += j;
1813 bd2 += j;
1814 bd2 += bc.scale;
1815 i = bb2 < bd2 ? bb2 : bd2;
1816 if (i > bs2)
1817 i = bs2;
1818 if (i > 0) {
1819 bb2 -= i;
1820 bd2 -= i;
1821 bs2 -= i;
1822 }
1823 if (bb5 > 0) {
1824 bs = pow5mult(bs, bb5);
1825 if (bs == NULL) {
1826 Bfree(bb);
1827 Bfree(bd);
1828 Bfree(bd0);
1829 goto failed_malloc;
1830 }
1831 bb1 = mult(bs, bb);
1832 Bfree(bb);
1833 bb = bb1;
1834 if (bb == NULL) {
1835 Bfree(bs);
1836 Bfree(bd);
1837 Bfree(bd0);
1838 goto failed_malloc;
1839 }
1840 }
1841 if (bb2 > 0) {
1842 bb = lshift(bb, bb2);
1843 if (bb == NULL) {
1844 Bfree(bs);
1845 Bfree(bd);
1846 Bfree(bd0);
1847 goto failed_malloc;
1848 }
1849 }
1850 if (bd5 > 0) {
1851 bd = pow5mult(bd, bd5);
1852 if (bd == NULL) {
1853 Bfree(bb);
1854 Bfree(bs);
1855 Bfree(bd0);
1856 goto failed_malloc;
1857 }
1858 }
1859 if (bd2 > 0) {
1860 bd = lshift(bd, bd2);
1861 if (bd == NULL) {
1862 Bfree(bb);
1863 Bfree(bs);
1864 Bfree(bd0);
1865 goto failed_malloc;
1866 }
1867 }
1868 if (bs2 > 0) {
1869 bs = lshift(bs, bs2);
1870 if (bs == NULL) {
1871 Bfree(bb);
1872 Bfree(bd);
1873 Bfree(bd0);
1874 goto failed_malloc;
1875 }
1876 }
1877 delta = diff(bb, bd);
1878 if (delta == NULL) {
1879 Bfree(bb);
1880 Bfree(bs);
1881 Bfree(bd);
1882 Bfree(bd0);
1883 goto failed_malloc;
1884 }
1885 bc.dsign = delta->sign;
1886 delta->sign = 0;
1887 i = cmp(delta, bs);
1888 if (bc.nd > nd && i <= 0) {
1889 if (bc.dsign)
1890 break; /* Must use bigcomp(). */
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001891
1892 /* Here rv overestimates the truncated decimal value by at most
1893 0.5 ulp(rv). Hence rv either overestimates the true decimal
1894 value by <= 0.5 ulp(rv), or underestimates it by some small
1895 amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
1896 the true decimal value, so it's possible to exit.
1897
1898 Exception: if scaled rv is a normal exact power of 2, but not
1899 DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
1900 next double, so the correctly rounded result is either rv - 0.5
1901 ulp(rv) or rv; in this case, use bigcomp to distinguish. */
1902
1903 if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
1904 /* rv can't be 0, since it's an overestimate for some
1905 nonzero value. So rv is a normal power of 2. */
1906 j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
1907 /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
1908 rv / 2^bc.scale >= 2^-1021. */
1909 if (j - bc.scale >= 2) {
1910 dval(&rv) -= 0.5 * sulp(&rv, &bc);
1911 break;
1912 }
1913 }
1914
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001915 {
1916 bc.nd = nd;
1917 i = -1; /* Discarded digits make delta smaller. */
1918 }
1919 }
1920
1921 if (i < 0) {
1922 /* Error is less than half an ulp -- check for
1923 * special case of mantissa a power of two.
1924 */
1925 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask
1926 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1927 ) {
1928 break;
1929 }
1930 if (!delta->x[0] && delta->wds <= 1) {
1931 /* exact result */
1932 break;
1933 }
1934 delta = lshift(delta,Log2P);
1935 if (delta == NULL) {
1936 Bfree(bb);
1937 Bfree(bs);
1938 Bfree(bd);
1939 Bfree(bd0);
1940 goto failed_malloc;
1941 }
1942 if (cmp(delta, bs) > 0)
1943 goto drop_down;
1944 break;
1945 }
1946 if (i == 0) {
1947 /* exactly half-way between */
1948 if (bc.dsign) {
1949 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1950 && word1(&rv) == (
1951 (bc.scale &&
1952 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1953 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
1954 0xffffffff)) {
1955 /*boundary case -- increment exponent*/
1956 word0(&rv) = (word0(&rv) & Exp_mask)
1957 + Exp_msk1
1958 ;
1959 word1(&rv) = 0;
1960 bc.dsign = 0;
1961 break;
1962 }
1963 }
1964 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
1965 drop_down:
1966 /* boundary case -- decrement exponent */
1967 if (bc.scale) {
1968 L = word0(&rv) & Exp_mask;
1969 if (L <= (2*P+1)*Exp_msk1) {
1970 if (L > (P+2)*Exp_msk1)
1971 /* round even ==> */
1972 /* accept rv */
1973 break;
1974 /* rv = smallest denormal */
Mark Dickinson81612e82010-01-12 23:04:19 +00001975 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001976 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001977 goto undfl;
1978 }
1979 }
1980 L = (word0(&rv) & Exp_mask) - Exp_msk1;
1981 word0(&rv) = L | Bndry_mask1;
1982 word1(&rv) = 0xffffffff;
1983 break;
1984 }
1985 if (!(word1(&rv) & LSB))
1986 break;
1987 if (bc.dsign)
1988 dval(&rv) += ulp(&rv);
1989 else {
1990 dval(&rv) -= ulp(&rv);
1991 if (!dval(&rv)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00001992 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001993 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001994 goto undfl;
1995 }
1996 }
1997 bc.dsign = 1 - bc.dsign;
1998 break;
1999 }
2000 if ((aadj = ratio(delta, bs)) <= 2.) {
2001 if (bc.dsign)
2002 aadj = aadj1 = 1.;
2003 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
2004 if (word1(&rv) == Tiny1 && !word0(&rv)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00002005 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002006 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002007 goto undfl;
2008 }
2009 aadj = 1.;
2010 aadj1 = -1.;
2011 }
2012 else {
2013 /* special case -- power of FLT_RADIX to be */
2014 /* rounded down... */
2015
2016 if (aadj < 2./FLT_RADIX)
2017 aadj = 1./FLT_RADIX;
2018 else
2019 aadj *= 0.5;
2020 aadj1 = -aadj;
2021 }
2022 }
2023 else {
2024 aadj *= 0.5;
2025 aadj1 = bc.dsign ? aadj : -aadj;
2026 if (Flt_Rounds == 0)
2027 aadj1 += 0.5;
2028 }
2029 y = word0(&rv) & Exp_mask;
2030
2031 /* Check for overflow */
2032
2033 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
2034 dval(&rv0) = dval(&rv);
2035 word0(&rv) -= P*Exp_msk1;
2036 adj.d = aadj1 * ulp(&rv);
2037 dval(&rv) += adj.d;
2038 if ((word0(&rv) & Exp_mask) >=
2039 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
Mark Dickinsonc4f18682010-01-17 14:39:12 +00002040 if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
2041 Bfree(bb);
2042 Bfree(bd);
2043 Bfree(bs);
2044 Bfree(bd0);
2045 Bfree(delta);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002046 goto ovfl;
Mark Dickinsonc4f18682010-01-17 14:39:12 +00002047 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002048 word0(&rv) = Big0;
2049 word1(&rv) = Big1;
2050 goto cont;
2051 }
2052 else
2053 word0(&rv) += P*Exp_msk1;
2054 }
2055 else {
2056 if (bc.scale && y <= 2*P*Exp_msk1) {
2057 if (aadj <= 0x7fffffff) {
2058 if ((z = (ULong)aadj) <= 0)
2059 z = 1;
2060 aadj = z;
2061 aadj1 = bc.dsign ? aadj : -aadj;
2062 }
2063 dval(&aadj2) = aadj1;
2064 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
2065 aadj1 = dval(&aadj2);
2066 }
2067 adj.d = aadj1 * ulp(&rv);
2068 dval(&rv) += adj.d;
2069 }
2070 z = word0(&rv) & Exp_mask;
2071 if (bc.nd == nd) {
2072 if (!bc.scale)
2073 if (y == z) {
2074 /* Can we stop now? */
2075 L = (Long)aadj;
2076 aadj -= L;
2077 /* The tolerances below are conservative. */
2078 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
2079 if (aadj < .4999999 || aadj > .5000001)
2080 break;
2081 }
2082 else if (aadj < .4999999/FLT_RADIX)
2083 break;
2084 }
2085 }
2086 cont:
2087 Bfree(bb);
2088 Bfree(bd);
2089 Bfree(bs);
2090 Bfree(delta);
2091 }
2092 Bfree(bb);
2093 Bfree(bd);
2094 Bfree(bs);
2095 Bfree(bd0);
2096 Bfree(delta);
2097 if (bc.nd > nd) {
2098 error = bigcomp(&rv, s0, &bc);
2099 if (error)
2100 goto failed_malloc;
2101 }
2102
2103 if (bc.scale) {
2104 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
2105 word1(&rv0) = 0;
2106 dval(&rv) *= dval(&rv0);
2107 /* try to avoid the bug of testing an 8087 register value */
2108 if (!(word0(&rv) & Exp_mask))
2109 errno = ERANGE;
2110 }
2111 ret:
2112 if (se)
2113 *se = (char *)s;
2114 return sign ? -dval(&rv) : dval(&rv);
2115
2116 failed_malloc:
2117 if (se)
2118 *se = (char *)s00;
2119 errno = ENOMEM;
2120 return -1.0;
2121}
2122
2123static char *
2124rv_alloc(int i)
2125{
2126 int j, k, *r;
2127
2128 j = sizeof(ULong);
2129 for(k = 0;
2130 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
2131 j <<= 1)
2132 k++;
2133 r = (int*)Balloc(k);
2134 if (r == NULL)
2135 return NULL;
2136 *r = k;
2137 return (char *)(r+1);
2138}
2139
2140static char *
2141nrv_alloc(char *s, char **rve, int n)
2142{
2143 char *rv, *t;
2144
2145 rv = rv_alloc(n);
2146 if (rv == NULL)
2147 return NULL;
2148 t = rv;
2149 while((*t = *s++)) t++;
2150 if (rve)
2151 *rve = t;
2152 return rv;
2153}
2154
2155/* freedtoa(s) must be used to free values s returned by dtoa
2156 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
2157 * but for consistency with earlier versions of dtoa, it is optional
2158 * when MULTIPLE_THREADS is not defined.
2159 */
2160
2161void
2162_Py_dg_freedtoa(char *s)
2163{
2164 Bigint *b = (Bigint *)((int *)s - 1);
2165 b->maxwds = 1 << (b->k = *(int*)b);
2166 Bfree(b);
2167}
2168
2169/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
2170 *
2171 * Inspired by "How to Print Floating-Point Numbers Accurately" by
2172 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
2173 *
2174 * Modifications:
2175 * 1. Rather than iterating, we use a simple numeric overestimate
2176 * to determine k = floor(log10(d)). We scale relevant
2177 * quantities using O(log2(k)) rather than O(k) multiplications.
2178 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
2179 * try to generate digits strictly left to right. Instead, we
2180 * compute with fewer bits and propagate the carry if necessary
2181 * when rounding the final digit up. This is often faster.
2182 * 3. Under the assumption that input will be rounded nearest,
2183 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
2184 * That is, we allow equality in stopping tests when the
2185 * round-nearest rule will give the same floating-point value
2186 * as would satisfaction of the stopping test with strict
2187 * inequality.
2188 * 4. We remove common factors of powers of 2 from relevant
2189 * quantities.
2190 * 5. When converting floating-point integers less than 1e16,
2191 * we use floating-point arithmetic rather than resorting
2192 * to multiple-precision integers.
2193 * 6. When asked to produce fewer than 15 digits, we first try
2194 * to get by with floating-point arithmetic; we resort to
2195 * multiple-precision integer arithmetic only if we cannot
2196 * guarantee that the floating-point calculation has given
2197 * the correctly rounded result. For k requested digits and
2198 * "uniformly" distributed input, the probability is
2199 * something like 10^(k-15) that we must resort to the Long
2200 * calculation.
2201 */
2202
2203/* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2204 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2205 call to _Py_dg_freedtoa. */
2206
2207char *
2208_Py_dg_dtoa(double dd, int mode, int ndigits,
2209 int *decpt, int *sign, char **rve)
2210{
2211 /* Arguments ndigits, decpt, sign are similar to those
2212 of ecvt and fcvt; trailing zeros are suppressed from
2213 the returned string. If not null, *rve is set to point
2214 to the end of the return value. If d is +-Infinity or NaN,
2215 then *decpt is set to 9999.
2216
2217 mode:
2218 0 ==> shortest string that yields d when read in
2219 and rounded to nearest.
2220 1 ==> like 0, but with Steele & White stopping rule;
2221 e.g. with IEEE P754 arithmetic , mode 0 gives
2222 1e23 whereas mode 1 gives 9.999999999999999e22.
2223 2 ==> max(1,ndigits) significant digits. This gives a
2224 return value similar to that of ecvt, except
2225 that trailing zeros are suppressed.
2226 3 ==> through ndigits past the decimal point. This
2227 gives a return value similar to that from fcvt,
2228 except that trailing zeros are suppressed, and
2229 ndigits can be negative.
2230 4,5 ==> similar to 2 and 3, respectively, but (in
2231 round-nearest mode) with the tests of mode 0 to
2232 possibly return a shorter string that rounds to d.
2233 With IEEE arithmetic and compilation with
2234 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2235 as modes 2 and 3 when FLT_ROUNDS != 1.
2236 6-9 ==> Debugging modes similar to mode - 4: don't try
2237 fast floating-point estimate (if applicable).
2238
2239 Values of mode other than 0-9 are treated as mode 0.
2240
2241 Sufficient space is allocated to the return value
2242 to hold the suppressed trailing zeros.
2243 */
2244
2245 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2246 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2247 spec_case, try_quick;
2248 Long L;
2249 int denorm;
2250 ULong x;
2251 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2252 U d2, eps, u;
2253 double ds;
2254 char *s, *s0;
2255
2256 /* set pointers to NULL, to silence gcc compiler warnings and make
2257 cleanup easier on error */
2258 mlo = mhi = b = S = 0;
2259 s0 = 0;
2260
2261 u.d = dd;
2262 if (word0(&u) & Sign_bit) {
2263 /* set sign for everything, including 0's and NaNs */
2264 *sign = 1;
2265 word0(&u) &= ~Sign_bit; /* clear sign bit */
2266 }
2267 else
2268 *sign = 0;
2269
2270 /* quick return for Infinities, NaNs and zeros */
2271 if ((word0(&u) & Exp_mask) == Exp_mask)
2272 {
2273 /* Infinity or NaN */
2274 *decpt = 9999;
2275 if (!word1(&u) && !(word0(&u) & 0xfffff))
2276 return nrv_alloc("Infinity", rve, 8);
2277 return nrv_alloc("NaN", rve, 3);
2278 }
2279 if (!dval(&u)) {
2280 *decpt = 1;
2281 return nrv_alloc("0", rve, 1);
2282 }
2283
2284 /* compute k = floor(log10(d)). The computation may leave k
2285 one too large, but should never leave k too small. */
2286 b = d2b(&u, &be, &bbits);
2287 if (b == NULL)
2288 goto failed_malloc;
2289 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2290 dval(&d2) = dval(&u);
2291 word0(&d2) &= Frac_mask1;
2292 word0(&d2) |= Exp_11;
2293
2294 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2295 * log10(x) = log(x) / log(10)
2296 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2297 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2298 *
2299 * This suggests computing an approximation k to log10(d) by
2300 *
2301 * k = (i - Bias)*0.301029995663981
2302 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2303 *
2304 * We want k to be too large rather than too small.
2305 * The error in the first-order Taylor series approximation
2306 * is in our favor, so we just round up the constant enough
2307 * to compensate for any error in the multiplication of
2308 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2309 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2310 * adding 1e-13 to the constant term more than suffices.
2311 * Hence we adjust the constant term to 0.1760912590558.
2312 * (We could get a more accurate k by invoking log10,
2313 * but this is probably not worthwhile.)
2314 */
2315
2316 i -= Bias;
2317 denorm = 0;
2318 }
2319 else {
2320 /* d is denormalized */
2321
2322 i = bbits + be + (Bias + (P-1) - 1);
2323 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2324 : word1(&u) << (32 - i);
2325 dval(&d2) = x;
2326 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2327 i -= (Bias + (P-1) - 1) + 1;
2328 denorm = 1;
2329 }
2330 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2331 i*0.301029995663981;
2332 k = (int)ds;
2333 if (ds < 0. && ds != k)
2334 k--; /* want k = floor(ds) */
2335 k_check = 1;
2336 if (k >= 0 && k <= Ten_pmax) {
2337 if (dval(&u) < tens[k])
2338 k--;
2339 k_check = 0;
2340 }
2341 j = bbits - i - 1;
2342 if (j >= 0) {
2343 b2 = 0;
2344 s2 = j;
2345 }
2346 else {
2347 b2 = -j;
2348 s2 = 0;
2349 }
2350 if (k >= 0) {
2351 b5 = 0;
2352 s5 = k;
2353 s2 += k;
2354 }
2355 else {
2356 b2 -= k;
2357 b5 = -k;
2358 s5 = 0;
2359 }
2360 if (mode < 0 || mode > 9)
2361 mode = 0;
2362
2363 try_quick = 1;
2364
2365 if (mode > 5) {
2366 mode -= 4;
2367 try_quick = 0;
2368 }
2369 leftright = 1;
2370 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2371 /* silence erroneous "gcc -Wall" warning. */
2372 switch(mode) {
2373 case 0:
2374 case 1:
2375 i = 18;
2376 ndigits = 0;
2377 break;
2378 case 2:
2379 leftright = 0;
2380 /* no break */
2381 case 4:
2382 if (ndigits <= 0)
2383 ndigits = 1;
2384 ilim = ilim1 = i = ndigits;
2385 break;
2386 case 3:
2387 leftright = 0;
2388 /* no break */
2389 case 5:
2390 i = ndigits + k + 1;
2391 ilim = i;
2392 ilim1 = i - 1;
2393 if (i <= 0)
2394 i = 1;
2395 }
2396 s0 = rv_alloc(i);
2397 if (s0 == NULL)
2398 goto failed_malloc;
2399 s = s0;
2400
2401
2402 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2403
2404 /* Try to get by with floating-point arithmetic. */
2405
2406 i = 0;
2407 dval(&d2) = dval(&u);
2408 k0 = k;
2409 ilim0 = ilim;
2410 ieps = 2; /* conservative */
2411 if (k > 0) {
2412 ds = tens[k&0xf];
2413 j = k >> 4;
2414 if (j & Bletch) {
2415 /* prevent overflows */
2416 j &= Bletch - 1;
2417 dval(&u) /= bigtens[n_bigtens-1];
2418 ieps++;
2419 }
2420 for(; j; j >>= 1, i++)
2421 if (j & 1) {
2422 ieps++;
2423 ds *= bigtens[i];
2424 }
2425 dval(&u) /= ds;
2426 }
2427 else if ((j1 = -k)) {
2428 dval(&u) *= tens[j1 & 0xf];
2429 for(j = j1 >> 4; j; j >>= 1, i++)
2430 if (j & 1) {
2431 ieps++;
2432 dval(&u) *= bigtens[i];
2433 }
2434 }
2435 if (k_check && dval(&u) < 1. && ilim > 0) {
2436 if (ilim1 <= 0)
2437 goto fast_failed;
2438 ilim = ilim1;
2439 k--;
2440 dval(&u) *= 10.;
2441 ieps++;
2442 }
2443 dval(&eps) = ieps*dval(&u) + 7.;
2444 word0(&eps) -= (P-1)*Exp_msk1;
2445 if (ilim == 0) {
2446 S = mhi = 0;
2447 dval(&u) -= 5.;
2448 if (dval(&u) > dval(&eps))
2449 goto one_digit;
2450 if (dval(&u) < -dval(&eps))
2451 goto no_digits;
2452 goto fast_failed;
2453 }
2454 if (leftright) {
2455 /* Use Steele & White method of only
2456 * generating digits needed.
2457 */
2458 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2459 for(i = 0;;) {
2460 L = (Long)dval(&u);
2461 dval(&u) -= L;
2462 *s++ = '0' + (int)L;
2463 if (dval(&u) < dval(&eps))
2464 goto ret1;
2465 if (1. - dval(&u) < dval(&eps))
2466 goto bump_up;
2467 if (++i >= ilim)
2468 break;
2469 dval(&eps) *= 10.;
2470 dval(&u) *= 10.;
2471 }
2472 }
2473 else {
2474 /* Generate ilim digits, then fix them up. */
2475 dval(&eps) *= tens[ilim-1];
2476 for(i = 1;; i++, dval(&u) *= 10.) {
2477 L = (Long)(dval(&u));
2478 if (!(dval(&u) -= L))
2479 ilim = i;
2480 *s++ = '0' + (int)L;
2481 if (i == ilim) {
2482 if (dval(&u) > 0.5 + dval(&eps))
2483 goto bump_up;
2484 else if (dval(&u) < 0.5 - dval(&eps)) {
2485 while(*--s == '0');
2486 s++;
2487 goto ret1;
2488 }
2489 break;
2490 }
2491 }
2492 }
2493 fast_failed:
2494 s = s0;
2495 dval(&u) = dval(&d2);
2496 k = k0;
2497 ilim = ilim0;
2498 }
2499
2500 /* Do we have a "small" integer? */
2501
2502 if (be >= 0 && k <= Int_max) {
2503 /* Yes. */
2504 ds = tens[k];
2505 if (ndigits < 0 && ilim <= 0) {
2506 S = mhi = 0;
2507 if (ilim < 0 || dval(&u) <= 5*ds)
2508 goto no_digits;
2509 goto one_digit;
2510 }
2511 for(i = 1;; i++, dval(&u) *= 10.) {
2512 L = (Long)(dval(&u) / ds);
2513 dval(&u) -= L*ds;
2514 *s++ = '0' + (int)L;
2515 if (!dval(&u)) {
2516 break;
2517 }
2518 if (i == ilim) {
2519 dval(&u) += dval(&u);
2520 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2521 bump_up:
2522 while(*--s == '9')
2523 if (s == s0) {
2524 k++;
2525 *s = '0';
2526 break;
2527 }
2528 ++*s++;
2529 }
2530 break;
2531 }
2532 }
2533 goto ret1;
2534 }
2535
2536 m2 = b2;
2537 m5 = b5;
2538 if (leftright) {
2539 i =
2540 denorm ? be + (Bias + (P-1) - 1 + 1) :
2541 1 + P - bbits;
2542 b2 += i;
2543 s2 += i;
2544 mhi = i2b(1);
2545 if (mhi == NULL)
2546 goto failed_malloc;
2547 }
2548 if (m2 > 0 && s2 > 0) {
2549 i = m2 < s2 ? m2 : s2;
2550 b2 -= i;
2551 m2 -= i;
2552 s2 -= i;
2553 }
2554 if (b5 > 0) {
2555 if (leftright) {
2556 if (m5 > 0) {
2557 mhi = pow5mult(mhi, m5);
2558 if (mhi == NULL)
2559 goto failed_malloc;
2560 b1 = mult(mhi, b);
2561 Bfree(b);
2562 b = b1;
2563 if (b == NULL)
2564 goto failed_malloc;
2565 }
2566 if ((j = b5 - m5)) {
2567 b = pow5mult(b, j);
2568 if (b == NULL)
2569 goto failed_malloc;
2570 }
2571 }
2572 else {
2573 b = pow5mult(b, b5);
2574 if (b == NULL)
2575 goto failed_malloc;
2576 }
2577 }
2578 S = i2b(1);
2579 if (S == NULL)
2580 goto failed_malloc;
2581 if (s5 > 0) {
2582 S = pow5mult(S, s5);
2583 if (S == NULL)
2584 goto failed_malloc;
2585 }
2586
2587 /* Check for special case that d is a normalized power of 2. */
2588
2589 spec_case = 0;
2590 if ((mode < 2 || leftright)
2591 ) {
2592 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2593 && word0(&u) & (Exp_mask & ~Exp_msk1)
2594 ) {
2595 /* The special case */
2596 b2 += Log2P;
2597 s2 += Log2P;
2598 spec_case = 1;
2599 }
2600 }
2601
2602 /* Arrange for convenient computation of quotients:
2603 * shift left if necessary so divisor has 4 leading 0 bits.
2604 *
2605 * Perhaps we should just compute leading 28 bits of S once
2606 * and for all and pass them and a shift to quorem, so it
2607 * can do shifts and ors to compute the numerator for q.
2608 */
2609 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
2610 i = 32 - i;
2611#define iInc 28
2612 i = dshift(S, s2);
2613 b2 += i;
2614 m2 += i;
2615 s2 += i;
2616 if (b2 > 0) {
2617 b = lshift(b, b2);
2618 if (b == NULL)
2619 goto failed_malloc;
2620 }
2621 if (s2 > 0) {
2622 S = lshift(S, s2);
2623 if (S == NULL)
2624 goto failed_malloc;
2625 }
2626 if (k_check) {
2627 if (cmp(b,S) < 0) {
2628 k--;
2629 b = multadd(b, 10, 0); /* we botched the k estimate */
2630 if (b == NULL)
2631 goto failed_malloc;
2632 if (leftright) {
2633 mhi = multadd(mhi, 10, 0);
2634 if (mhi == NULL)
2635 goto failed_malloc;
2636 }
2637 ilim = ilim1;
2638 }
2639 }
2640 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2641 if (ilim < 0) {
2642 /* no digits, fcvt style */
2643 no_digits:
2644 k = -1 - ndigits;
2645 goto ret;
2646 }
2647 else {
2648 S = multadd(S, 5, 0);
2649 if (S == NULL)
2650 goto failed_malloc;
2651 if (cmp(b, S) <= 0)
2652 goto no_digits;
2653 }
2654 one_digit:
2655 *s++ = '1';
2656 k++;
2657 goto ret;
2658 }
2659 if (leftright) {
2660 if (m2 > 0) {
2661 mhi = lshift(mhi, m2);
2662 if (mhi == NULL)
2663 goto failed_malloc;
2664 }
2665
2666 /* Compute mlo -- check for special case
2667 * that d is a normalized power of 2.
2668 */
2669
2670 mlo = mhi;
2671 if (spec_case) {
2672 mhi = Balloc(mhi->k);
2673 if (mhi == NULL)
2674 goto failed_malloc;
2675 Bcopy(mhi, mlo);
2676 mhi = lshift(mhi, Log2P);
2677 if (mhi == NULL)
2678 goto failed_malloc;
2679 }
2680
2681 for(i = 1;;i++) {
2682 dig = quorem(b,S) + '0';
2683 /* Do we yet have the shortest decimal string
2684 * that will round to d?
2685 */
2686 j = cmp(b, mlo);
2687 delta = diff(S, mhi);
2688 if (delta == NULL)
2689 goto failed_malloc;
2690 j1 = delta->sign ? 1 : cmp(b, delta);
2691 Bfree(delta);
2692 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2693 ) {
2694 if (dig == '9')
2695 goto round_9_up;
2696 if (j > 0)
2697 dig++;
2698 *s++ = dig;
2699 goto ret;
2700 }
2701 if (j < 0 || (j == 0 && mode != 1
2702 && !(word1(&u) & 1)
2703 )) {
2704 if (!b->x[0] && b->wds <= 1) {
2705 goto accept_dig;
2706 }
2707 if (j1 > 0) {
2708 b = lshift(b, 1);
2709 if (b == NULL)
2710 goto failed_malloc;
2711 j1 = cmp(b, S);
2712 if ((j1 > 0 || (j1 == 0 && dig & 1))
2713 && dig++ == '9')
2714 goto round_9_up;
2715 }
2716 accept_dig:
2717 *s++ = dig;
2718 goto ret;
2719 }
2720 if (j1 > 0) {
2721 if (dig == '9') { /* possible if i == 1 */
2722 round_9_up:
2723 *s++ = '9';
2724 goto roundoff;
2725 }
2726 *s++ = dig + 1;
2727 goto ret;
2728 }
2729 *s++ = dig;
2730 if (i == ilim)
2731 break;
2732 b = multadd(b, 10, 0);
2733 if (b == NULL)
2734 goto failed_malloc;
2735 if (mlo == mhi) {
2736 mlo = mhi = multadd(mhi, 10, 0);
2737 if (mlo == NULL)
2738 goto failed_malloc;
2739 }
2740 else {
2741 mlo = multadd(mlo, 10, 0);
2742 if (mlo == NULL)
2743 goto failed_malloc;
2744 mhi = multadd(mhi, 10, 0);
2745 if (mhi == NULL)
2746 goto failed_malloc;
2747 }
2748 }
2749 }
2750 else
2751 for(i = 1;; i++) {
2752 *s++ = dig = quorem(b,S) + '0';
2753 if (!b->x[0] && b->wds <= 1) {
2754 goto ret;
2755 }
2756 if (i >= ilim)
2757 break;
2758 b = multadd(b, 10, 0);
2759 if (b == NULL)
2760 goto failed_malloc;
2761 }
2762
2763 /* Round off last digit */
2764
2765 b = lshift(b, 1);
2766 if (b == NULL)
2767 goto failed_malloc;
2768 j = cmp(b, S);
2769 if (j > 0 || (j == 0 && dig & 1)) {
2770 roundoff:
2771 while(*--s == '9')
2772 if (s == s0) {
2773 k++;
2774 *s++ = '1';
2775 goto ret;
2776 }
2777 ++*s++;
2778 }
2779 else {
2780 while(*--s == '0');
2781 s++;
2782 }
2783 ret:
2784 Bfree(S);
2785 if (mhi) {
2786 if (mlo && mlo != mhi)
2787 Bfree(mlo);
2788 Bfree(mhi);
2789 }
2790 ret1:
2791 Bfree(b);
2792 *s = 0;
2793 *decpt = k + 1;
2794 if (rve)
2795 *rve = s;
2796 return s0;
2797 failed_malloc:
2798 if (S)
2799 Bfree(S);
2800 if (mlo && mlo != mhi)
2801 Bfree(mlo);
2802 if (mhi)
2803 Bfree(mhi);
2804 if (b)
2805 Bfree(b);
2806 if (s0)
2807 _Py_dg_freedtoa(s0);
2808 return NULL;
2809}
2810#ifdef __cplusplus
2811}
2812#endif
2813
2814#endif /* PY_NO_SHORT_FLOAT_REPR */