blob: 9e3c5d82408d4e735513478cdeeccfe04f0dee1b [file] [log] [blame]
Mark Dickinsonbb282852009-10-24 12:13:30 +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.
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
Mark Dickinsonbb282852009-10-24 12:13:30 +0000119/* 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 Dickinson0ca74522010-01-11 17:15:13 +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
208#endif
209
Mark Dickinsonbb282852009-10-24 12:13:30 +0000210/* 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
268/* struct BCinfo is used to pass information from _Py_dg_strtod to bigcomp */
269
270typedef struct BCinfo BCinfo;
271struct
272BCinfo {
Mark Dickinson4141d652010-01-20 17:36:31 +0000273 int e0, nd, nd0, scale;
Mark Dickinsonbb282852009-10-24 12:13:30 +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 Dickinson9481c572010-01-17 20:57:56 +0000311#ifndef Py_USING_MEMORY_DEBUGGER
312
Mark Dickinsonbb282852009-10-24 12:13:30 +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);
349 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
350 rv = (Bigint*)pmem_next;
351 pmem_next += len;
352 }
353 else {
354 rv = (Bigint*)MALLOC(len*sizeof(double));
355 if (rv == NULL)
356 return NULL;
357 }
358 rv->k = k;
359 rv->maxwds = x;
360 }
361 rv->sign = rv->wds = 0;
362 return rv;
363}
364
365/* Free a Bigint allocated with Balloc */
366
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 Dickinson9481c572010-01-17 20:57:56 +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 Dickinsonbb282852009-10-24 12:13:30 +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;
450 *x++ = (ULong)(y & FFFFFFFF);
451#else
452 xi = *x;
453 y = (xi & 0xffff) * m + carry;
454 z = (xi >> 16) * m + (y >> 16);
455 carry = z >> 16;
456 *x++ = (z << 16) + (y & 0xffff);
457#endif
458 }
459 while(++i < wds);
460 if (carry) {
461 if (wds >= b->maxwds) {
462 b1 = Balloc(b->k+1);
463 if (b1 == NULL){
464 Bfree(b);
465 return NULL;
466 }
467 Bcopy(b1, b);
468 Bfree(b);
469 b = b1;
470 }
471 b->x[wds++] = (ULong)carry;
472 b->wds = wds;
473 }
474 return b;
475}
476
477/* convert a string s containing nd decimal digits (possibly containing a
478 decimal separator at position nd0, which is ignored) to a Bigint. This
479 function carries on where the parsing code in _Py_dg_strtod leaves off: on
480 entry, y9 contains the result of converting the first 9 digits. Returns
481 NULL on failure. */
482
483static Bigint *
Mark Dickinsond2a99402010-01-13 22:20:10 +0000484s2b(const char *s, int nd0, int nd, ULong y9)
Mark Dickinsonbb282852009-10-24 12:13:30 +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 Dickinsond2a99402010-01-13 22:20:10 +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 Dickinsonbb282852009-10-24 12:13:30 +0000506 }
Mark Dickinsond2a99402010-01-13 22:20:10 +0000507 s++;
Mark Dickinsonbb282852009-10-24 12:13:30 +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;
655 *xc++ = (ULong)(z & FFFFFFFF);
656 }
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 Dickinson9481c572010-01-17 20:57:56 +0000699#ifndef Py_USING_MEMORY_DEBUGGER
700
Mark Dickinsonbb282852009-10-24 12:13:30 +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 Dickinson9481c572010-01-17 20:57:56 +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 Dickinsonbb282852009-10-24 12:13:30 +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;
939 *xc++ = (ULong)(y & FFFFFFFF);
940 }
941 while(xb < xbe);
942 while(xa < xae) {
943 y = *xa++ - borrow;
944 borrow = y >> 32 & (ULong)1;
945 *xc++ = (ULong)(y & FFFFFFFF);
946 }
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
Mark Dickinson4141d652010-01-20 17:36:31 +0000970/* Given a positive normal double x, return the difference between x and the
971 next double up. Doesn't give correct results for subnormals. */
Mark Dickinsonbb282852009-10-24 12:13:30 +0000972
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 Dickinson2bcd1772010-01-04 21:32:02 +00001026 significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
Mark Dickinsonbb282852009-10-24 12:13:30 +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
1116#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;
1171 *bx++ = (ULong)(y & FFFFFFFF);
1172#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;
1204 *bx++ = (ULong)(y & FFFFFFFF);
1205#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 Dickinson5818e012010-01-13 19:02:37 +00001229/* sulp(x) is a version of ulp(x) that takes bc.scale into account.
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001230
Mark Dickinson5818e012010-01-13 19:02:37 +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 Dickinson5ff4f272010-01-12 22:55:51 +00001234
1235static double
1236sulp(U *x, BCinfo *bc)
1237{
1238 U u;
1239
Mark Dickinson02139d72010-01-13 22:15:53 +00001240 if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001241 /* rv/2^bc->scale is subnormal */
1242 word0(&u) = (P+2)*Exp_msk1;
1243 word1(&u) = 0;
1244 return u.d;
1245 }
Mark Dickinson5818e012010-01-13 19:02:37 +00001246 else {
1247 assert(word0(x) || word1(x)); /* x != 0.0 */
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001248 return ulp(x);
Mark Dickinson5818e012010-01-13 19:02:37 +00001249 }
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001250}
Mark Dickinsonbb282852009-10-24 12:13:30 +00001251
Mark Dickinsonb26d56a2010-01-13 18:21:53 +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
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001262 the corresponding digits of s0.
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001263
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
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001279 bc->e0 gives the exponent of the input value, such that dv = (integer
1280 given by the bd->nd digits of s0) * 10**e0
1281
Mark Dickinsond2a99402010-01-13 22:20:10 +00001282 bc->nd gives the total number of significant digits of s0. It will
1283 be at least 1.
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001284
1285 bc->nd0 gives the number of significant digits of s0 before the
1286 decimal separator. If there's no decimal separator, bc->nd0 ==
1287 bc->nd.
1288
1289 bc->scale is the value used to scale rv to avoid doing arithmetic with
1290 subnormal values. It's either 0 or 2*P (=106).
1291
1292 Outputs:
1293
1294 On successful exit, rv/2^(bc->scale) is the closest double to dv.
1295
1296 Returns 0 on success, -1 on failure (e.g., due to a failed malloc call). */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001297
1298static int
1299bigcomp(U *rv, const char *s0, BCinfo *bc)
1300{
1301 Bigint *b, *d;
Mark Dickinson50b60c62010-01-14 13:14:49 +00001302 int b2, bbits, d2, dd, i, nd, nd0, odd, p2, p5;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001303
Mark Dickinsond2a99402010-01-13 22:20:10 +00001304 dd = 0; /* silence compiler warning about possibly unused variable */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001305 nd = bc->nd;
1306 nd0 = bc->nd0;
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001307 p5 = nd + bc->e0;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001308 if (rv->d == 0.) {
1309 /* special case because d2b doesn't handle 0.0 */
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001310 b = i2b(0);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001311 if (b == NULL)
1312 return -1;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001313 p2 = Emin - P + 1; /* = -1074 for IEEE 754 binary64 */
1314 bbits = 0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001315 }
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001316 else {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001317 b = d2b(rv, &p2, &bbits);
1318 if (b == NULL)
1319 return -1;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001320 p2 -= bc->scale;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001321 }
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001322 /* now rv/2^(bc->scale) = b * 2**p2, and b has bbits significant bits */
1323
1324 /* Replace (b, p2) by (b << i, p2 - i), with i the largest integer such
1325 that b << i has at most P significant bits and p2 - i >= Emin - P +
1326 1. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001327 i = P - bbits;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001328 if (i > p2 - (Emin - P + 1))
1329 i = p2 - (Emin - P + 1);
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001330 /* increment i so that we shift b by an extra bit; then or-ing a 1 into
1331 the lsb of b gives us rv/2^(bc->scale) + 0.5ulp. */
1332 b = lshift(b, ++i);
1333 if (b == NULL)
1334 return -1;
Mark Dickinson50b60c62010-01-14 13:14:49 +00001335 /* record whether the lsb of rv/2^(bc->scale) is odd: in the exact halfway
1336 case, this is used for round to even. */
1337 odd = b->x[0] & 2;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001338 b->x[0] |= 1;
1339
Mark Dickinsonbb282852009-10-24 12:13:30 +00001340 p2 -= p5 + i;
1341 d = i2b(1);
1342 if (d == NULL) {
1343 Bfree(b);
1344 return -1;
1345 }
1346 /* Arrange for convenient computation of quotients:
1347 * shift left if necessary so divisor has 4 leading 0 bits.
1348 */
1349 if (p5 > 0) {
1350 d = pow5mult(d, p5);
1351 if (d == NULL) {
1352 Bfree(b);
1353 return -1;
1354 }
1355 }
1356 else if (p5 < 0) {
1357 b = pow5mult(b, -p5);
1358 if (b == NULL) {
1359 Bfree(d);
1360 return -1;
1361 }
1362 }
1363 if (p2 > 0) {
1364 b2 = p2;
1365 d2 = 0;
1366 }
1367 else {
1368 b2 = 0;
1369 d2 = -p2;
1370 }
1371 i = dshift(d, d2);
1372 if ((b2 += i) > 0) {
1373 b = lshift(b, b2);
1374 if (b == NULL) {
1375 Bfree(d);
1376 return -1;
1377 }
1378 }
1379 if ((d2 += i) > 0) {
1380 d = lshift(d, d2);
1381 if (d == NULL) {
1382 Bfree(b);
1383 return -1;
1384 }
1385 }
1386
Mark Dickinson4141d652010-01-20 17:36:31 +00001387 /* Compare s0 with b/d: set dd to -1, 0, or 1 according as s0 < b/d, s0 ==
1388 * b/d, or s0 > b/d. Here the digits of s0 are thought of as representing
1389 * a number in the range [0.1, 1). */
1390 if (cmp(b, d) >= 0)
1391 /* b/d >= 1 */
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001392 dd = -1;
Mark Dickinson4141d652010-01-20 17:36:31 +00001393 else {
1394 i = 0;
1395 for(;;) {
1396 b = multadd(b, 10, 0);
1397 if (b == NULL) {
1398 Bfree(d);
1399 return -1;
1400 }
1401 dd = s0[i < nd0 ? i : i+1] - '0' - quorem(b, d);
1402 i++;
Mark Dickinson50b60c62010-01-14 13:14:49 +00001403
Mark Dickinson4141d652010-01-20 17:36:31 +00001404 if (dd)
1405 break;
1406 if (!b->x[0] && b->wds == 1) {
1407 /* b/d == 0 */
1408 dd = i < nd;
1409 break;
1410 }
1411 if (!(i < nd)) {
1412 /* b/d != 0, but digits of s0 exhausted */
1413 dd = -1;
1414 break;
1415 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00001416 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00001417 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00001418 Bfree(b);
1419 Bfree(d);
Mark Dickinson50b60c62010-01-14 13:14:49 +00001420 if (dd > 0 || (dd == 0 && odd))
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001421 dval(rv) += sulp(rv, bc);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001422 return 0;
1423}
1424
1425double
1426_Py_dg_strtod(const char *s00, char **se)
1427{
Mark Dickinson4141d652010-01-20 17:36:31 +00001428 int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dsign, e, e1, error;
1429 int esign, i, j, k, lz, nd, nd0, sign;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001430 const char *s, *s0, *s1;
1431 double aadj, aadj1;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001432 U aadj2, adj, rv, rv0;
Mark Dickinson4141d652010-01-20 17:36:31 +00001433 ULong y, z, abs_exp;
Mark Dickinson18a818b2010-01-16 18:06:17 +00001434 Long L;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001435 BCinfo bc;
1436 Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1437
Mark Dickinsonbb282852009-10-24 12:13:30 +00001438 dval(&rv) = 0.;
Mark Dickinson4141d652010-01-20 17:36:31 +00001439
1440 /* Start parsing. */
1441 c = *(s = s00);
1442
1443 /* Parse optional sign, if present. */
1444 sign = 0;
1445 switch (c) {
1446 case '-':
1447 sign = 1;
1448 /* no break */
1449 case '+':
1450 c = *++s;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001451 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001452
1453 /* Skip leading zeros: lz is true iff there were leading zeros. */
1454 s1 = s;
1455 while (c == '0')
1456 c = *++s;
1457 lz = s != s1;
1458
1459 /* Point s0 at the first nonzero digit (if any). nd0 will be the position
1460 of the point relative to s0. nd will be the total number of digits
1461 ignoring leading zeros. */
1462 s0 = s1 = s;
1463 while ('0' <= c && c <= '9')
1464 c = *++s;
1465 nd0 = nd = s - s1;
1466
1467 /* Parse decimal point and following digits. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001468 if (c == '.') {
1469 c = *++s;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001470 if (!nd) {
Mark Dickinson4141d652010-01-20 17:36:31 +00001471 s1 = s;
1472 while (c == '0')
1473 c = *++s;
1474 lz = lz || s != s1;
1475 nd0 -= s - s1;
1476 s0 = s;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001477 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001478 s1 = s;
1479 while ('0' <= c && c <= '9')
1480 c = *++s;
1481 nd += s - s1;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001482 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001483
1484 /* Now lz is true if and only if there were leading zero digits, and nd
1485 gives the total number of digits ignoring leading zeros. A valid input
1486 must have at least one digit. */
1487 if (!nd && !lz) {
Mark Dickinson19428062010-01-20 18:02:41 +00001488 if (se)
1489 *se = (char *)s00;
Mark Dickinson4141d652010-01-20 17:36:31 +00001490 goto parse_error;
1491 }
1492
1493 /* Parse exponent. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001494 e = 0;
1495 if (c == 'e' || c == 'E') {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001496 s00 = s;
Mark Dickinson4141d652010-01-20 17:36:31 +00001497 c = *++s;
1498
1499 /* Exponent sign. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001500 esign = 0;
Mark Dickinson4141d652010-01-20 17:36:31 +00001501 switch (c) {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001502 case '-':
1503 esign = 1;
Mark Dickinson4141d652010-01-20 17:36:31 +00001504 /* no break */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001505 case '+':
1506 c = *++s;
1507 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001508
1509 /* Skip zeros. lz is true iff there are leading zeros. */
1510 s1 = s;
1511 while (c == '0')
1512 c = *++s;
1513 lz = s != s1;
1514
1515 /* Get absolute value of the exponent. */
1516 s1 = s;
1517 abs_exp = 0;
1518 while ('0' <= c && c <= '9') {
1519 abs_exp = 10*abs_exp + (c - '0');
1520 c = *++s;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001521 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001522
1523 /* abs_exp will be correct modulo 2**32. But 10**9 < 2**32, so if
1524 there are at most 9 significant exponent digits then overflow is
1525 impossible. */
1526 if (s - s1 > 9 || abs_exp > MAX_ABS_EXP)
1527 e = (int)MAX_ABS_EXP;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001528 else
Mark Dickinson4141d652010-01-20 17:36:31 +00001529 e = (int)abs_exp;
1530 if (esign)
1531 e = -e;
1532
1533 /* A valid exponent must have at least one digit. */
1534 if (s == s1 && !lz)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001535 s = s00;
1536 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001537
1538 /* Adjust exponent to take into account position of the point. */
1539 e -= nd - nd0;
1540 if (nd0 <= 0)
Mark Dickinson811ff822010-01-16 17:57:49 +00001541 nd0 = nd;
1542
Mark Dickinson4141d652010-01-20 17:36:31 +00001543 /* Finished parsing. Set se to indicate how far we parsed */
1544 if (se)
1545 *se = (char *)s;
1546
1547 /* If all digits were zero, exit with return value +-0.0. Otherwise,
1548 strip trailing zeros: scan back until we hit a nonzero digit. */
1549 if (!nd)
1550 goto ret;
Mark Dickinson811ff822010-01-16 17:57:49 +00001551 for (i = nd; i > 0; ) {
Mark Dickinson811ff822010-01-16 17:57:49 +00001552 --i;
1553 if (s0[i < nd0 ? i : i+1] != '0') {
1554 ++i;
1555 break;
1556 }
1557 }
1558 e += nd - i;
1559 nd = i;
1560 if (nd0 > nd)
1561 nd0 = nd;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001562
Mark Dickinson4141d652010-01-20 17:36:31 +00001563 /* Summary of parsing results. After parsing, and dealing with zero
1564 * inputs, we have values s0, nd0, nd, e, sign, where:
Mark Dickinson476279f2010-01-16 10:44:00 +00001565 *
Mark Dickinson4141d652010-01-20 17:36:31 +00001566 * - s0 points to the first significant digit of the input string
Mark Dickinson476279f2010-01-16 10:44:00 +00001567 *
Mark Dickinson811ff822010-01-16 17:57:49 +00001568 * - nd is the total number of significant digits (here, and
1569 * below, 'significant digits' means the set of digits of the
1570 * significand of the input that remain after ignoring leading
Mark Dickinson4141d652010-01-20 17:36:31 +00001571 * and trailing zeros).
Mark Dickinson476279f2010-01-16 10:44:00 +00001572 *
Mark Dickinson4141d652010-01-20 17:36:31 +00001573 * - nd0 indicates the position of the decimal point, if present; it
1574 * satisfies 1 <= nd0 <= nd. The nd significant digits are in
1575 * s0[0:nd0] and s0[nd0+1:nd+1] using the usual Python half-open slice
1576 * notation. (If nd0 < nd, then s0[nd0] contains a '.' character; if
1577 * nd0 == nd, then s0[nd0] could be any non-digit character.)
Mark Dickinson476279f2010-01-16 10:44:00 +00001578 *
Mark Dickinson811ff822010-01-16 17:57:49 +00001579 * - e is the adjusted exponent: the absolute value of the number
1580 * represented by the original input string is n * 10**e, where
1581 * n is the integer represented by the concatenation of
1582 * s0[0:nd0] and s0[nd0+1:nd+1]
Mark Dickinson476279f2010-01-16 10:44:00 +00001583 *
Mark Dickinson811ff822010-01-16 17:57:49 +00001584 * - sign gives the sign of the input: 1 for negative, 0 for positive
1585 *
1586 * - the first and last significant digits are nonzero
1587 */
1588
1589 /* put first DBL_DIG+1 digits into integer y and z.
Mark Dickinson476279f2010-01-16 10:44:00 +00001590 *
1591 * - y contains the value represented by the first min(9, nd)
1592 * significant digits
1593 *
1594 * - if nd > 9, z contains the value represented by significant digits
1595 * with indices in [9, min(16, nd)). So y * 10**(min(16, nd) - 9) + z
1596 * gives the value represented by the first min(16, nd) sig. digits.
1597 */
1598
Mark Dickinson4141d652010-01-20 17:36:31 +00001599 bc.e0 = e1 = e;
Mark Dickinson811ff822010-01-16 17:57:49 +00001600 y = z = 0;
1601 for (i = 0; i < nd; i++) {
1602 if (i < 9)
1603 y = 10*y + s0[i < nd0 ? i : i+1] - '0';
1604 else if (i < DBL_DIG+1)
1605 z = 10*z + s0[i < nd0 ? i : i+1] - '0';
1606 else
1607 break;
1608 }
1609
Mark Dickinsonbb282852009-10-24 12:13:30 +00001610 k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1611 dval(&rv) = y;
1612 if (k > 9) {
1613 dval(&rv) = tens[k - 9] * dval(&rv) + z;
1614 }
1615 bd0 = 0;
1616 if (nd <= DBL_DIG
1617 && Flt_Rounds == 1
1618 ) {
1619 if (!e)
1620 goto ret;
1621 if (e > 0) {
1622 if (e <= Ten_pmax) {
1623 dval(&rv) *= tens[e];
1624 goto ret;
1625 }
1626 i = DBL_DIG - nd;
1627 if (e <= Ten_pmax + i) {
1628 /* A fancier test would sometimes let us do
1629 * this for larger i values.
1630 */
1631 e -= i;
1632 dval(&rv) *= tens[i];
1633 dval(&rv) *= tens[e];
1634 goto ret;
1635 }
1636 }
1637 else if (e >= -Ten_pmax) {
1638 dval(&rv) /= tens[-e];
1639 goto ret;
1640 }
1641 }
1642 e1 += nd - k;
1643
1644 bc.scale = 0;
1645
1646 /* Get starting approximation = rv * 10**e1 */
1647
1648 if (e1 > 0) {
1649 if ((i = e1 & 15))
1650 dval(&rv) *= tens[i];
1651 if (e1 &= ~15) {
Mark Dickinson4141d652010-01-20 17:36:31 +00001652 if (e1 > DBL_MAX_10_EXP)
1653 goto ovfl;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001654 e1 >>= 4;
1655 for(j = 0; e1 > 1; j++, e1 >>= 1)
1656 if (e1 & 1)
1657 dval(&rv) *= bigtens[j];
1658 /* The last multiplication could overflow. */
1659 word0(&rv) -= P*Exp_msk1;
1660 dval(&rv) *= bigtens[j];
1661 if ((z = word0(&rv) & Exp_mask)
1662 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1663 goto ovfl;
1664 if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1665 /* set to largest number */
1666 /* (Can't trust DBL_MAX) */
1667 word0(&rv) = Big0;
1668 word1(&rv) = Big1;
1669 }
1670 else
1671 word0(&rv) += P*Exp_msk1;
1672 }
1673 }
1674 else if (e1 < 0) {
1675 e1 = -e1;
1676 if ((i = e1 & 15))
1677 dval(&rv) /= tens[i];
1678 if (e1 >>= 4) {
1679 if (e1 >= 1 << n_bigtens)
1680 goto undfl;
1681 if (e1 & Scale_Bit)
1682 bc.scale = 2*P;
1683 for(j = 0; e1 > 0; j++, e1 >>= 1)
1684 if (e1 & 1)
1685 dval(&rv) *= tinytens[j];
1686 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1687 >> Exp_shift)) > 0) {
1688 /* scaled rv is denormal; clear j low bits */
1689 if (j >= 32) {
1690 word1(&rv) = 0;
1691 if (j >= 53)
1692 word0(&rv) = (P+2)*Exp_msk1;
1693 else
1694 word0(&rv) &= 0xffffffff << (j-32);
1695 }
1696 else
1697 word1(&rv) &= 0xffffffff << j;
1698 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001699 if (!dval(&rv))
1700 goto undfl;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001701 }
1702 }
1703
1704 /* Now the hard part -- adjusting rv to the correct value.*/
1705
1706 /* Put digits into bd: true value = bd * 10^e */
1707
1708 bc.nd = nd;
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001709 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001710 /* to silence an erroneous warning about bc.nd0 */
1711 /* possibly not being initialized. */
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001712 if (nd > STRTOD_DIGLIM) {
1713 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001714 /* minimum number of decimal digits to distinguish double values */
1715 /* in IEEE arithmetic. */
Mark Dickinson476279f2010-01-16 10:44:00 +00001716
1717 /* Truncate input to 18 significant digits, then discard any trailing
1718 zeros on the result by updating nd, nd0, e and y suitably. (There's
1719 no need to update z; it's not reused beyond this point.) */
1720 for (i = 18; i > 0; ) {
1721 /* scan back until we hit a nonzero digit. significant digit 'i'
1722 is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001723 --i;
Mark Dickinson476279f2010-01-16 10:44:00 +00001724 if (s0[i < nd0 ? i : i+1] != '0') {
1725 ++i;
1726 break;
1727 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00001728 }
1729 e += nd - i;
1730 nd = i;
1731 if (nd0 > nd)
1732 nd0 = nd;
1733 if (nd < 9) { /* must recompute y */
1734 y = 0;
1735 for(i = 0; i < nd0; ++i)
1736 y = 10*y + s0[i] - '0';
Mark Dickinson476279f2010-01-16 10:44:00 +00001737 for(; i < nd; ++i)
1738 y = 10*y + s0[i+1] - '0';
Mark Dickinsonbb282852009-10-24 12:13:30 +00001739 }
1740 }
Mark Dickinsond2a99402010-01-13 22:20:10 +00001741 bd0 = s2b(s0, nd0, nd, y);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001742 if (bd0 == NULL)
1743 goto failed_malloc;
1744
1745 for(;;) {
1746 bd = Balloc(bd0->k);
1747 if (bd == NULL) {
1748 Bfree(bd0);
1749 goto failed_malloc;
1750 }
1751 Bcopy(bd, bd0);
1752 bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
1753 if (bb == NULL) {
1754 Bfree(bd);
1755 Bfree(bd0);
1756 goto failed_malloc;
1757 }
1758 bs = i2b(1);
1759 if (bs == NULL) {
1760 Bfree(bb);
1761 Bfree(bd);
1762 Bfree(bd0);
1763 goto failed_malloc;
1764 }
1765
1766 if (e >= 0) {
1767 bb2 = bb5 = 0;
1768 bd2 = bd5 = e;
1769 }
1770 else {
1771 bb2 = bb5 = -e;
1772 bd2 = bd5 = 0;
1773 }
1774 if (bbe >= 0)
1775 bb2 += bbe;
1776 else
1777 bd2 -= bbe;
1778 bs2 = bb2;
1779 j = bbe - bc.scale;
1780 i = j + bbbits - 1; /* logb(rv) */
1781 if (i < Emin) /* denormal */
1782 j += P - Emin;
1783 else
1784 j = P + 1 - bbbits;
1785 bb2 += j;
1786 bd2 += j;
1787 bd2 += bc.scale;
1788 i = bb2 < bd2 ? bb2 : bd2;
1789 if (i > bs2)
1790 i = bs2;
1791 if (i > 0) {
1792 bb2 -= i;
1793 bd2 -= i;
1794 bs2 -= i;
1795 }
1796 if (bb5 > 0) {
1797 bs = pow5mult(bs, bb5);
1798 if (bs == NULL) {
1799 Bfree(bb);
1800 Bfree(bd);
1801 Bfree(bd0);
1802 goto failed_malloc;
1803 }
1804 bb1 = mult(bs, bb);
1805 Bfree(bb);
1806 bb = bb1;
1807 if (bb == NULL) {
1808 Bfree(bs);
1809 Bfree(bd);
1810 Bfree(bd0);
1811 goto failed_malloc;
1812 }
1813 }
1814 if (bb2 > 0) {
1815 bb = lshift(bb, bb2);
1816 if (bb == NULL) {
1817 Bfree(bs);
1818 Bfree(bd);
1819 Bfree(bd0);
1820 goto failed_malloc;
1821 }
1822 }
1823 if (bd5 > 0) {
1824 bd = pow5mult(bd, bd5);
1825 if (bd == NULL) {
1826 Bfree(bb);
1827 Bfree(bs);
1828 Bfree(bd0);
1829 goto failed_malloc;
1830 }
1831 }
1832 if (bd2 > 0) {
1833 bd = lshift(bd, bd2);
1834 if (bd == NULL) {
1835 Bfree(bb);
1836 Bfree(bs);
1837 Bfree(bd0);
1838 goto failed_malloc;
1839 }
1840 }
1841 if (bs2 > 0) {
1842 bs = lshift(bs, bs2);
1843 if (bs == NULL) {
1844 Bfree(bb);
1845 Bfree(bd);
1846 Bfree(bd0);
1847 goto failed_malloc;
1848 }
1849 }
1850 delta = diff(bb, bd);
1851 if (delta == NULL) {
1852 Bfree(bb);
1853 Bfree(bs);
1854 Bfree(bd);
1855 Bfree(bd0);
1856 goto failed_malloc;
1857 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001858 dsign = delta->sign;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001859 delta->sign = 0;
1860 i = cmp(delta, bs);
1861 if (bc.nd > nd && i <= 0) {
Mark Dickinson4141d652010-01-20 17:36:31 +00001862 if (dsign)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001863 break; /* Must use bigcomp(). */
Mark Dickinsonf8747c12010-01-14 14:40:20 +00001864
1865 /* Here rv overestimates the truncated decimal value by at most
1866 0.5 ulp(rv). Hence rv either overestimates the true decimal
1867 value by <= 0.5 ulp(rv), or underestimates it by some small
1868 amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
1869 the true decimal value, so it's possible to exit.
1870
1871 Exception: if scaled rv is a normal exact power of 2, but not
1872 DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
1873 next double, so the correctly rounded result is either rv - 0.5
1874 ulp(rv) or rv; in this case, use bigcomp to distinguish. */
1875
1876 if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
1877 /* rv can't be 0, since it's an overestimate for some
1878 nonzero value. So rv is a normal power of 2. */
1879 j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
1880 /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
1881 rv / 2^bc.scale >= 2^-1021. */
1882 if (j - bc.scale >= 2) {
1883 dval(&rv) -= 0.5 * sulp(&rv, &bc);
Mark Dickinson4141d652010-01-20 17:36:31 +00001884 break; /* Use bigcomp. */
Mark Dickinsonf8747c12010-01-14 14:40:20 +00001885 }
1886 }
1887
Mark Dickinsonbb282852009-10-24 12:13:30 +00001888 {
1889 bc.nd = nd;
1890 i = -1; /* Discarded digits make delta smaller. */
1891 }
1892 }
1893
1894 if (i < 0) {
1895 /* Error is less than half an ulp -- check for
1896 * special case of mantissa a power of two.
1897 */
Mark Dickinson4141d652010-01-20 17:36:31 +00001898 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
Mark Dickinsonbb282852009-10-24 12:13:30 +00001899 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1900 ) {
1901 break;
1902 }
1903 if (!delta->x[0] && delta->wds <= 1) {
1904 /* exact result */
1905 break;
1906 }
1907 delta = lshift(delta,Log2P);
1908 if (delta == NULL) {
1909 Bfree(bb);
1910 Bfree(bs);
1911 Bfree(bd);
1912 Bfree(bd0);
1913 goto failed_malloc;
1914 }
1915 if (cmp(delta, bs) > 0)
1916 goto drop_down;
1917 break;
1918 }
1919 if (i == 0) {
1920 /* exactly half-way between */
Mark Dickinson4141d652010-01-20 17:36:31 +00001921 if (dsign) {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001922 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1923 && word1(&rv) == (
1924 (bc.scale &&
1925 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1926 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
1927 0xffffffff)) {
1928 /*boundary case -- increment exponent*/
1929 word0(&rv) = (word0(&rv) & Exp_mask)
1930 + Exp_msk1
1931 ;
1932 word1(&rv) = 0;
Mark Dickinson4141d652010-01-20 17:36:31 +00001933 dsign = 0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001934 break;
1935 }
1936 }
1937 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
1938 drop_down:
1939 /* boundary case -- decrement exponent */
1940 if (bc.scale) {
1941 L = word0(&rv) & Exp_mask;
1942 if (L <= (2*P+1)*Exp_msk1) {
1943 if (L > (P+2)*Exp_msk1)
1944 /* round even ==> */
1945 /* accept rv */
1946 break;
1947 /* rv = smallest denormal */
Mark Dickinson4141d652010-01-20 17:36:31 +00001948 if (bc.nd > nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001949 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001950 goto undfl;
1951 }
1952 }
1953 L = (word0(&rv) & Exp_mask) - Exp_msk1;
1954 word0(&rv) = L | Bndry_mask1;
1955 word1(&rv) = 0xffffffff;
1956 break;
1957 }
1958 if (!(word1(&rv) & LSB))
1959 break;
Mark Dickinson4141d652010-01-20 17:36:31 +00001960 if (dsign)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001961 dval(&rv) += ulp(&rv);
1962 else {
1963 dval(&rv) -= ulp(&rv);
1964 if (!dval(&rv)) {
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001965 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001966 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001967 goto undfl;
1968 }
1969 }
Mark Dickinson4141d652010-01-20 17:36:31 +00001970 dsign = 1 - dsign;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001971 break;
1972 }
1973 if ((aadj = ratio(delta, bs)) <= 2.) {
Mark Dickinson4141d652010-01-20 17:36:31 +00001974 if (dsign)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001975 aadj = aadj1 = 1.;
1976 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
1977 if (word1(&rv) == Tiny1 && !word0(&rv)) {
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001978 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001979 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001980 goto undfl;
1981 }
1982 aadj = 1.;
1983 aadj1 = -1.;
1984 }
1985 else {
1986 /* special case -- power of FLT_RADIX to be */
1987 /* rounded down... */
1988
1989 if (aadj < 2./FLT_RADIX)
1990 aadj = 1./FLT_RADIX;
1991 else
1992 aadj *= 0.5;
1993 aadj1 = -aadj;
1994 }
1995 }
1996 else {
1997 aadj *= 0.5;
Mark Dickinson4141d652010-01-20 17:36:31 +00001998 aadj1 = dsign ? aadj : -aadj;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001999 if (Flt_Rounds == 0)
2000 aadj1 += 0.5;
2001 }
2002 y = word0(&rv) & Exp_mask;
2003
2004 /* Check for overflow */
2005
2006 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
2007 dval(&rv0) = dval(&rv);
2008 word0(&rv) -= P*Exp_msk1;
2009 adj.d = aadj1 * ulp(&rv);
2010 dval(&rv) += adj.d;
2011 if ((word0(&rv) & Exp_mask) >=
2012 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
Mark Dickinson23df3d22010-01-17 13:37:57 +00002013 if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
2014 Bfree(bb);
2015 Bfree(bd);
2016 Bfree(bs);
2017 Bfree(bd0);
2018 Bfree(delta);
Mark Dickinsonbb282852009-10-24 12:13:30 +00002019 goto ovfl;
Mark Dickinson23df3d22010-01-17 13:37:57 +00002020 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00002021 word0(&rv) = Big0;
2022 word1(&rv) = Big1;
2023 goto cont;
2024 }
2025 else
2026 word0(&rv) += P*Exp_msk1;
2027 }
2028 else {
2029 if (bc.scale && y <= 2*P*Exp_msk1) {
2030 if (aadj <= 0x7fffffff) {
2031 if ((z = (ULong)aadj) <= 0)
2032 z = 1;
2033 aadj = z;
Mark Dickinson4141d652010-01-20 17:36:31 +00002034 aadj1 = dsign ? aadj : -aadj;
Mark Dickinsonbb282852009-10-24 12:13:30 +00002035 }
2036 dval(&aadj2) = aadj1;
2037 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
2038 aadj1 = dval(&aadj2);
2039 }
2040 adj.d = aadj1 * ulp(&rv);
2041 dval(&rv) += adj.d;
2042 }
2043 z = word0(&rv) & Exp_mask;
2044 if (bc.nd == nd) {
2045 if (!bc.scale)
2046 if (y == z) {
2047 /* Can we stop now? */
2048 L = (Long)aadj;
2049 aadj -= L;
2050 /* The tolerances below are conservative. */
Mark Dickinson4141d652010-01-20 17:36:31 +00002051 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
Mark Dickinsonbb282852009-10-24 12:13:30 +00002052 if (aadj < .4999999 || aadj > .5000001)
2053 break;
2054 }
2055 else if (aadj < .4999999/FLT_RADIX)
2056 break;
2057 }
2058 }
2059 cont:
2060 Bfree(bb);
2061 Bfree(bd);
2062 Bfree(bs);
2063 Bfree(delta);
2064 }
2065 Bfree(bb);
2066 Bfree(bd);
2067 Bfree(bs);
2068 Bfree(bd0);
2069 Bfree(delta);
2070 if (bc.nd > nd) {
2071 error = bigcomp(&rv, s0, &bc);
2072 if (error)
2073 goto failed_malloc;
2074 }
2075
2076 if (bc.scale) {
2077 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
2078 word1(&rv0) = 0;
2079 dval(&rv) *= dval(&rv0);
Mark Dickinsonbb282852009-10-24 12:13:30 +00002080 }
Mark Dickinson4141d652010-01-20 17:36:31 +00002081
Mark Dickinsonbb282852009-10-24 12:13:30 +00002082 ret:
Mark Dickinsonbb282852009-10-24 12:13:30 +00002083 return sign ? -dval(&rv) : dval(&rv);
2084
Mark Dickinson4141d652010-01-20 17:36:31 +00002085 parse_error:
2086 return 0.0;
2087
Mark Dickinsonbb282852009-10-24 12:13:30 +00002088 failed_malloc:
Mark Dickinsonbb282852009-10-24 12:13:30 +00002089 errno = ENOMEM;
2090 return -1.0;
Mark Dickinson4141d652010-01-20 17:36:31 +00002091
2092 undfl:
2093 return sign ? -0.0 : 0.0;
2094
2095 ovfl:
2096 errno = ERANGE;
2097 /* Can't trust HUGE_VAL */
2098 word0(&rv) = Exp_mask;
2099 word1(&rv) = 0;
2100 return sign ? -dval(&rv) : dval(&rv);
2101
Mark Dickinsonbb282852009-10-24 12:13:30 +00002102}
2103
2104static char *
2105rv_alloc(int i)
2106{
2107 int j, k, *r;
2108
2109 j = sizeof(ULong);
2110 for(k = 0;
2111 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
2112 j <<= 1)
2113 k++;
2114 r = (int*)Balloc(k);
2115 if (r == NULL)
2116 return NULL;
2117 *r = k;
2118 return (char *)(r+1);
2119}
2120
2121static char *
2122nrv_alloc(char *s, char **rve, int n)
2123{
2124 char *rv, *t;
2125
2126 rv = rv_alloc(n);
2127 if (rv == NULL)
2128 return NULL;
2129 t = rv;
2130 while((*t = *s++)) t++;
2131 if (rve)
2132 *rve = t;
2133 return rv;
2134}
2135
2136/* freedtoa(s) must be used to free values s returned by dtoa
2137 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
2138 * but for consistency with earlier versions of dtoa, it is optional
2139 * when MULTIPLE_THREADS is not defined.
2140 */
2141
2142void
2143_Py_dg_freedtoa(char *s)
2144{
2145 Bigint *b = (Bigint *)((int *)s - 1);
2146 b->maxwds = 1 << (b->k = *(int*)b);
2147 Bfree(b);
2148}
2149
2150/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
2151 *
2152 * Inspired by "How to Print Floating-Point Numbers Accurately" by
2153 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
2154 *
2155 * Modifications:
2156 * 1. Rather than iterating, we use a simple numeric overestimate
2157 * to determine k = floor(log10(d)). We scale relevant
2158 * quantities using O(log2(k)) rather than O(k) multiplications.
2159 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
2160 * try to generate digits strictly left to right. Instead, we
2161 * compute with fewer bits and propagate the carry if necessary
2162 * when rounding the final digit up. This is often faster.
2163 * 3. Under the assumption that input will be rounded nearest,
2164 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
2165 * That is, we allow equality in stopping tests when the
2166 * round-nearest rule will give the same floating-point value
2167 * as would satisfaction of the stopping test with strict
2168 * inequality.
2169 * 4. We remove common factors of powers of 2 from relevant
2170 * quantities.
2171 * 5. When converting floating-point integers less than 1e16,
2172 * we use floating-point arithmetic rather than resorting
2173 * to multiple-precision integers.
2174 * 6. When asked to produce fewer than 15 digits, we first try
2175 * to get by with floating-point arithmetic; we resort to
2176 * multiple-precision integer arithmetic only if we cannot
2177 * guarantee that the floating-point calculation has given
2178 * the correctly rounded result. For k requested digits and
2179 * "uniformly" distributed input, the probability is
2180 * something like 10^(k-15) that we must resort to the Long
2181 * calculation.
2182 */
2183
2184/* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2185 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2186 call to _Py_dg_freedtoa. */
2187
2188char *
2189_Py_dg_dtoa(double dd, int mode, int ndigits,
2190 int *decpt, int *sign, char **rve)
2191{
2192 /* Arguments ndigits, decpt, sign are similar to those
2193 of ecvt and fcvt; trailing zeros are suppressed from
2194 the returned string. If not null, *rve is set to point
2195 to the end of the return value. If d is +-Infinity or NaN,
2196 then *decpt is set to 9999.
2197
2198 mode:
2199 0 ==> shortest string that yields d when read in
2200 and rounded to nearest.
2201 1 ==> like 0, but with Steele & White stopping rule;
2202 e.g. with IEEE P754 arithmetic , mode 0 gives
2203 1e23 whereas mode 1 gives 9.999999999999999e22.
2204 2 ==> max(1,ndigits) significant digits. This gives a
2205 return value similar to that of ecvt, except
2206 that trailing zeros are suppressed.
2207 3 ==> through ndigits past the decimal point. This
2208 gives a return value similar to that from fcvt,
2209 except that trailing zeros are suppressed, and
2210 ndigits can be negative.
2211 4,5 ==> similar to 2 and 3, respectively, but (in
2212 round-nearest mode) with the tests of mode 0 to
2213 possibly return a shorter string that rounds to d.
2214 With IEEE arithmetic and compilation with
2215 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2216 as modes 2 and 3 when FLT_ROUNDS != 1.
2217 6-9 ==> Debugging modes similar to mode - 4: don't try
2218 fast floating-point estimate (if applicable).
2219
2220 Values of mode other than 0-9 are treated as mode 0.
2221
2222 Sufficient space is allocated to the return value
2223 to hold the suppressed trailing zeros.
2224 */
2225
2226 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2227 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2228 spec_case, try_quick;
2229 Long L;
2230 int denorm;
2231 ULong x;
2232 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2233 U d2, eps, u;
2234 double ds;
2235 char *s, *s0;
2236
2237 /* set pointers to NULL, to silence gcc compiler warnings and make
2238 cleanup easier on error */
2239 mlo = mhi = b = S = 0;
2240 s0 = 0;
2241
2242 u.d = dd;
2243 if (word0(&u) & Sign_bit) {
2244 /* set sign for everything, including 0's and NaNs */
2245 *sign = 1;
2246 word0(&u) &= ~Sign_bit; /* clear sign bit */
2247 }
2248 else
2249 *sign = 0;
2250
2251 /* quick return for Infinities, NaNs and zeros */
2252 if ((word0(&u) & Exp_mask) == Exp_mask)
2253 {
2254 /* Infinity or NaN */
2255 *decpt = 9999;
2256 if (!word1(&u) && !(word0(&u) & 0xfffff))
2257 return nrv_alloc("Infinity", rve, 8);
2258 return nrv_alloc("NaN", rve, 3);
2259 }
2260 if (!dval(&u)) {
2261 *decpt = 1;
2262 return nrv_alloc("0", rve, 1);
2263 }
2264
2265 /* compute k = floor(log10(d)). The computation may leave k
2266 one too large, but should never leave k too small. */
2267 b = d2b(&u, &be, &bbits);
2268 if (b == NULL)
2269 goto failed_malloc;
2270 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2271 dval(&d2) = dval(&u);
2272 word0(&d2) &= Frac_mask1;
2273 word0(&d2) |= Exp_11;
2274
2275 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2276 * log10(x) = log(x) / log(10)
2277 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2278 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2279 *
2280 * This suggests computing an approximation k to log10(d) by
2281 *
2282 * k = (i - Bias)*0.301029995663981
2283 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2284 *
2285 * We want k to be too large rather than too small.
2286 * The error in the first-order Taylor series approximation
2287 * is in our favor, so we just round up the constant enough
2288 * to compensate for any error in the multiplication of
2289 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2290 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2291 * adding 1e-13 to the constant term more than suffices.
2292 * Hence we adjust the constant term to 0.1760912590558.
2293 * (We could get a more accurate k by invoking log10,
2294 * but this is probably not worthwhile.)
2295 */
2296
2297 i -= Bias;
2298 denorm = 0;
2299 }
2300 else {
2301 /* d is denormalized */
2302
2303 i = bbits + be + (Bias + (P-1) - 1);
2304 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2305 : word1(&u) << (32 - i);
2306 dval(&d2) = x;
2307 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2308 i -= (Bias + (P-1) - 1) + 1;
2309 denorm = 1;
2310 }
2311 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2312 i*0.301029995663981;
2313 k = (int)ds;
2314 if (ds < 0. && ds != k)
2315 k--; /* want k = floor(ds) */
2316 k_check = 1;
2317 if (k >= 0 && k <= Ten_pmax) {
2318 if (dval(&u) < tens[k])
2319 k--;
2320 k_check = 0;
2321 }
2322 j = bbits - i - 1;
2323 if (j >= 0) {
2324 b2 = 0;
2325 s2 = j;
2326 }
2327 else {
2328 b2 = -j;
2329 s2 = 0;
2330 }
2331 if (k >= 0) {
2332 b5 = 0;
2333 s5 = k;
2334 s2 += k;
2335 }
2336 else {
2337 b2 -= k;
2338 b5 = -k;
2339 s5 = 0;
2340 }
2341 if (mode < 0 || mode > 9)
2342 mode = 0;
2343
2344 try_quick = 1;
2345
2346 if (mode > 5) {
2347 mode -= 4;
2348 try_quick = 0;
2349 }
2350 leftright = 1;
2351 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2352 /* silence erroneous "gcc -Wall" warning. */
2353 switch(mode) {
2354 case 0:
2355 case 1:
2356 i = 18;
2357 ndigits = 0;
2358 break;
2359 case 2:
2360 leftright = 0;
2361 /* no break */
2362 case 4:
2363 if (ndigits <= 0)
2364 ndigits = 1;
2365 ilim = ilim1 = i = ndigits;
2366 break;
2367 case 3:
2368 leftright = 0;
2369 /* no break */
2370 case 5:
2371 i = ndigits + k + 1;
2372 ilim = i;
2373 ilim1 = i - 1;
2374 if (i <= 0)
2375 i = 1;
2376 }
2377 s0 = rv_alloc(i);
2378 if (s0 == NULL)
2379 goto failed_malloc;
2380 s = s0;
2381
2382
2383 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2384
2385 /* Try to get by with floating-point arithmetic. */
2386
2387 i = 0;
2388 dval(&d2) = dval(&u);
2389 k0 = k;
2390 ilim0 = ilim;
2391 ieps = 2; /* conservative */
2392 if (k > 0) {
2393 ds = tens[k&0xf];
2394 j = k >> 4;
2395 if (j & Bletch) {
2396 /* prevent overflows */
2397 j &= Bletch - 1;
2398 dval(&u) /= bigtens[n_bigtens-1];
2399 ieps++;
2400 }
2401 for(; j; j >>= 1, i++)
2402 if (j & 1) {
2403 ieps++;
2404 ds *= bigtens[i];
2405 }
2406 dval(&u) /= ds;
2407 }
2408 else if ((j1 = -k)) {
2409 dval(&u) *= tens[j1 & 0xf];
2410 for(j = j1 >> 4; j; j >>= 1, i++)
2411 if (j & 1) {
2412 ieps++;
2413 dval(&u) *= bigtens[i];
2414 }
2415 }
2416 if (k_check && dval(&u) < 1. && ilim > 0) {
2417 if (ilim1 <= 0)
2418 goto fast_failed;
2419 ilim = ilim1;
2420 k--;
2421 dval(&u) *= 10.;
2422 ieps++;
2423 }
2424 dval(&eps) = ieps*dval(&u) + 7.;
2425 word0(&eps) -= (P-1)*Exp_msk1;
2426 if (ilim == 0) {
2427 S = mhi = 0;
2428 dval(&u) -= 5.;
2429 if (dval(&u) > dval(&eps))
2430 goto one_digit;
2431 if (dval(&u) < -dval(&eps))
2432 goto no_digits;
2433 goto fast_failed;
2434 }
2435 if (leftright) {
2436 /* Use Steele & White method of only
2437 * generating digits needed.
2438 */
2439 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2440 for(i = 0;;) {
2441 L = (Long)dval(&u);
2442 dval(&u) -= L;
2443 *s++ = '0' + (int)L;
2444 if (dval(&u) < dval(&eps))
2445 goto ret1;
2446 if (1. - dval(&u) < dval(&eps))
2447 goto bump_up;
2448 if (++i >= ilim)
2449 break;
2450 dval(&eps) *= 10.;
2451 dval(&u) *= 10.;
2452 }
2453 }
2454 else {
2455 /* Generate ilim digits, then fix them up. */
2456 dval(&eps) *= tens[ilim-1];
2457 for(i = 1;; i++, dval(&u) *= 10.) {
2458 L = (Long)(dval(&u));
2459 if (!(dval(&u) -= L))
2460 ilim = i;
2461 *s++ = '0' + (int)L;
2462 if (i == ilim) {
2463 if (dval(&u) > 0.5 + dval(&eps))
2464 goto bump_up;
2465 else if (dval(&u) < 0.5 - dval(&eps)) {
2466 while(*--s == '0');
2467 s++;
2468 goto ret1;
2469 }
2470 break;
2471 }
2472 }
2473 }
2474 fast_failed:
2475 s = s0;
2476 dval(&u) = dval(&d2);
2477 k = k0;
2478 ilim = ilim0;
2479 }
2480
2481 /* Do we have a "small" integer? */
2482
2483 if (be >= 0 && k <= Int_max) {
2484 /* Yes. */
2485 ds = tens[k];
2486 if (ndigits < 0 && ilim <= 0) {
2487 S = mhi = 0;
2488 if (ilim < 0 || dval(&u) <= 5*ds)
2489 goto no_digits;
2490 goto one_digit;
2491 }
2492 for(i = 1;; i++, dval(&u) *= 10.) {
2493 L = (Long)(dval(&u) / ds);
2494 dval(&u) -= L*ds;
2495 *s++ = '0' + (int)L;
2496 if (!dval(&u)) {
2497 break;
2498 }
2499 if (i == ilim) {
2500 dval(&u) += dval(&u);
2501 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2502 bump_up:
2503 while(*--s == '9')
2504 if (s == s0) {
2505 k++;
2506 *s = '0';
2507 break;
2508 }
2509 ++*s++;
2510 }
2511 break;
2512 }
2513 }
2514 goto ret1;
2515 }
2516
2517 m2 = b2;
2518 m5 = b5;
2519 if (leftright) {
2520 i =
2521 denorm ? be + (Bias + (P-1) - 1 + 1) :
2522 1 + P - bbits;
2523 b2 += i;
2524 s2 += i;
2525 mhi = i2b(1);
2526 if (mhi == NULL)
2527 goto failed_malloc;
2528 }
2529 if (m2 > 0 && s2 > 0) {
2530 i = m2 < s2 ? m2 : s2;
2531 b2 -= i;
2532 m2 -= i;
2533 s2 -= i;
2534 }
2535 if (b5 > 0) {
2536 if (leftright) {
2537 if (m5 > 0) {
2538 mhi = pow5mult(mhi, m5);
2539 if (mhi == NULL)
2540 goto failed_malloc;
2541 b1 = mult(mhi, b);
2542 Bfree(b);
2543 b = b1;
2544 if (b == NULL)
2545 goto failed_malloc;
2546 }
2547 if ((j = b5 - m5)) {
2548 b = pow5mult(b, j);
2549 if (b == NULL)
2550 goto failed_malloc;
2551 }
2552 }
2553 else {
2554 b = pow5mult(b, b5);
2555 if (b == NULL)
2556 goto failed_malloc;
2557 }
2558 }
2559 S = i2b(1);
2560 if (S == NULL)
2561 goto failed_malloc;
2562 if (s5 > 0) {
2563 S = pow5mult(S, s5);
2564 if (S == NULL)
2565 goto failed_malloc;
2566 }
2567
2568 /* Check for special case that d is a normalized power of 2. */
2569
2570 spec_case = 0;
2571 if ((mode < 2 || leftright)
2572 ) {
2573 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2574 && word0(&u) & (Exp_mask & ~Exp_msk1)
2575 ) {
2576 /* The special case */
2577 b2 += Log2P;
2578 s2 += Log2P;
2579 spec_case = 1;
2580 }
2581 }
2582
2583 /* Arrange for convenient computation of quotients:
2584 * shift left if necessary so divisor has 4 leading 0 bits.
2585 *
2586 * Perhaps we should just compute leading 28 bits of S once
2587 * and for all and pass them and a shift to quorem, so it
2588 * can do shifts and ors to compute the numerator for q.
2589 */
2590 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
2591 i = 32 - i;
2592#define iInc 28
2593 i = dshift(S, s2);
2594 b2 += i;
2595 m2 += i;
2596 s2 += i;
2597 if (b2 > 0) {
2598 b = lshift(b, b2);
2599 if (b == NULL)
2600 goto failed_malloc;
2601 }
2602 if (s2 > 0) {
2603 S = lshift(S, s2);
2604 if (S == NULL)
2605 goto failed_malloc;
2606 }
2607 if (k_check) {
2608 if (cmp(b,S) < 0) {
2609 k--;
2610 b = multadd(b, 10, 0); /* we botched the k estimate */
2611 if (b == NULL)
2612 goto failed_malloc;
2613 if (leftright) {
2614 mhi = multadd(mhi, 10, 0);
2615 if (mhi == NULL)
2616 goto failed_malloc;
2617 }
2618 ilim = ilim1;
2619 }
2620 }
2621 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2622 if (ilim < 0) {
2623 /* no digits, fcvt style */
2624 no_digits:
2625 k = -1 - ndigits;
2626 goto ret;
2627 }
2628 else {
2629 S = multadd(S, 5, 0);
2630 if (S == NULL)
2631 goto failed_malloc;
2632 if (cmp(b, S) <= 0)
2633 goto no_digits;
2634 }
2635 one_digit:
2636 *s++ = '1';
2637 k++;
2638 goto ret;
2639 }
2640 if (leftright) {
2641 if (m2 > 0) {
2642 mhi = lshift(mhi, m2);
2643 if (mhi == NULL)
2644 goto failed_malloc;
2645 }
2646
2647 /* Compute mlo -- check for special case
2648 * that d is a normalized power of 2.
2649 */
2650
2651 mlo = mhi;
2652 if (spec_case) {
2653 mhi = Balloc(mhi->k);
2654 if (mhi == NULL)
2655 goto failed_malloc;
2656 Bcopy(mhi, mlo);
2657 mhi = lshift(mhi, Log2P);
2658 if (mhi == NULL)
2659 goto failed_malloc;
2660 }
2661
2662 for(i = 1;;i++) {
2663 dig = quorem(b,S) + '0';
2664 /* Do we yet have the shortest decimal string
2665 * that will round to d?
2666 */
2667 j = cmp(b, mlo);
2668 delta = diff(S, mhi);
2669 if (delta == NULL)
2670 goto failed_malloc;
2671 j1 = delta->sign ? 1 : cmp(b, delta);
2672 Bfree(delta);
2673 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2674 ) {
2675 if (dig == '9')
2676 goto round_9_up;
2677 if (j > 0)
2678 dig++;
2679 *s++ = dig;
2680 goto ret;
2681 }
2682 if (j < 0 || (j == 0 && mode != 1
2683 && !(word1(&u) & 1)
2684 )) {
2685 if (!b->x[0] && b->wds <= 1) {
2686 goto accept_dig;
2687 }
2688 if (j1 > 0) {
2689 b = lshift(b, 1);
2690 if (b == NULL)
2691 goto failed_malloc;
2692 j1 = cmp(b, S);
2693 if ((j1 > 0 || (j1 == 0 && dig & 1))
2694 && dig++ == '9')
2695 goto round_9_up;
2696 }
2697 accept_dig:
2698 *s++ = dig;
2699 goto ret;
2700 }
2701 if (j1 > 0) {
2702 if (dig == '9') { /* possible if i == 1 */
2703 round_9_up:
2704 *s++ = '9';
2705 goto roundoff;
2706 }
2707 *s++ = dig + 1;
2708 goto ret;
2709 }
2710 *s++ = dig;
2711 if (i == ilim)
2712 break;
2713 b = multadd(b, 10, 0);
2714 if (b == NULL)
2715 goto failed_malloc;
2716 if (mlo == mhi) {
2717 mlo = mhi = multadd(mhi, 10, 0);
2718 if (mlo == NULL)
2719 goto failed_malloc;
2720 }
2721 else {
2722 mlo = multadd(mlo, 10, 0);
2723 if (mlo == NULL)
2724 goto failed_malloc;
2725 mhi = multadd(mhi, 10, 0);
2726 if (mhi == NULL)
2727 goto failed_malloc;
2728 }
2729 }
2730 }
2731 else
2732 for(i = 1;; i++) {
2733 *s++ = dig = quorem(b,S) + '0';
2734 if (!b->x[0] && b->wds <= 1) {
2735 goto ret;
2736 }
2737 if (i >= ilim)
2738 break;
2739 b = multadd(b, 10, 0);
2740 if (b == NULL)
2741 goto failed_malloc;
2742 }
2743
2744 /* Round off last digit */
2745
2746 b = lshift(b, 1);
2747 if (b == NULL)
2748 goto failed_malloc;
2749 j = cmp(b, S);
2750 if (j > 0 || (j == 0 && dig & 1)) {
2751 roundoff:
2752 while(*--s == '9')
2753 if (s == s0) {
2754 k++;
2755 *s++ = '1';
2756 goto ret;
2757 }
2758 ++*s++;
2759 }
2760 else {
2761 while(*--s == '0');
2762 s++;
2763 }
2764 ret:
2765 Bfree(S);
2766 if (mhi) {
2767 if (mlo && mlo != mhi)
2768 Bfree(mlo);
2769 Bfree(mhi);
2770 }
2771 ret1:
2772 Bfree(b);
2773 *s = 0;
2774 *decpt = k + 1;
2775 if (rve)
2776 *rve = s;
2777 return s0;
2778 failed_malloc:
2779 if (S)
2780 Bfree(S);
2781 if (mlo && mlo != mhi)
2782 Bfree(mlo);
2783 if (mhi)
2784 Bfree(mhi);
2785 if (b)
2786 Bfree(b);
2787 if (s0)
2788 _Py_dg_freedtoa(s0);
2789 return NULL;
2790}
2791#ifdef __cplusplus
2792}
2793#endif
2794
2795#endif /* PY_NO_SHORT_FLOAT_REPR */