blob: 9ca2dd95a047592656f6dcd71c9576d8db642f54 [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 Dickinsonadd28232010-01-21 19:51:08 +0000273 int 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
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +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 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
Mark Dickinson853c3bb2010-01-14 15:37:49 +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
1282 bc->nd gives the total number of significant digits of s0. It will
1283 be at least 1.
1284
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 Dickinsonb08a53a2009-04-16 19:52:09 +00001297
1298static int
1299bigcomp(U *rv, const char *s0, BCinfo *bc)
1300{
1301 Bigint *b, *d;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001302 int b2, bbits, d2, dd, i, nd, nd0, odd, p2, p5;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001303
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001304 dd = 0; /* silence compiler warning about possibly unused variable */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001305 nd = bc->nd;
1306 nd0 = bc->nd0;
Mark Dickinson81612e82010-01-12 23:04:19 +00001307 p5 = nd + bc->e0;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001308 if (rv->d == 0.) {
1309 /* special case because d2b doesn't handle 0.0 */
1310 b = i2b(0);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001311 if (b == NULL)
1312 return -1;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001313 p2 = Emin - P + 1; /* = -1074 for IEEE 754 binary64 */
1314 bbits = 0;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001315 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001316 else {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001317 b = d2b(rv, &p2, &bbits);
1318 if (b == NULL)
1319 return -1;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001320 p2 -= bc->scale;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001321 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001327 i = P - bbits;
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001328 if (i > p2 - (Emin - P + 1))
1329 i = p2 - (Emin - P + 1);
1330 /* 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;
1335 /* 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;
1338 b->x[0] |= 1;
1339
Mark Dickinsonb08a53a2009-04-16 19:52:09 +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 Dickinsonadd28232010-01-21 19:51:08 +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 Dickinson81612e82010-01-12 23:04:19 +00001392 dd = -1;
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001403
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinson853c3bb2010-01-14 15:37:49 +00001416 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001417 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001418 Bfree(b);
1419 Bfree(d);
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001420 if (dd > 0 || (dd == 0 && odd))
1421 dval(rv) += sulp(rv, bc);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001422 return 0;
1423}
1424
1425double
1426_Py_dg_strtod(const char *s00, char **se)
1427{
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001430 const char *s, *s0, *s1;
1431 double aadj, aadj1;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001432 U aadj2, adj, rv, rv0;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001433 ULong y, z, abs_exp;
Mark Dickinson45b63652010-01-16 18:10:25 +00001434 Long L;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001435 BCinfo bc;
1436 Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1437
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001438 dval(&rv) = 0.;
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001451 }
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001468 if (c == '.') {
1469 c = *++s;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001470 if (!nd) {
Mark Dickinsonadd28232010-01-21 19:51:08 +00001471 s1 = s;
1472 while (c == '0')
1473 c = *++s;
1474 lz = lz || s != s1;
1475 nd0 -= s - s1;
1476 s0 = s;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001477 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001478 s1 = s;
1479 while ('0' <= c && c <= '9')
1480 c = *++s;
1481 nd += s - s1;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001482 }
Mark Dickinsonadd28232010-01-21 19:51:08 +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) {
1488 if (se)
1489 *se = (char *)s00;
1490 goto parse_error;
1491 }
1492
1493 /* Parse exponent. */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001494 e = 0;
1495 if (c == 'e' || c == 'E') {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001496 s00 = s;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001497 c = *++s;
1498
1499 /* Exponent sign. */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001500 esign = 0;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001501 switch (c) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001502 case '-':
1503 esign = 1;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001504 /* no break */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001505 case '+':
1506 c = *++s;
1507 }
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001521 }
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001528 else
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001535 s = s00;
1536 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001537
1538 /* Adjust exponent to take into account position of the point. */
1539 e -= nd - nd0;
1540 if (nd0 <= 0)
Mark Dickinson45b63652010-01-16 18:10:25 +00001541 nd0 = nd;
1542
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinson45b63652010-01-16 18:10:25 +00001551 for (i = nd; i > 0; ) {
Mark Dickinson45b63652010-01-16 18:10:25 +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 Dickinsonb08a53a2009-04-16 19:52:09 +00001562
Mark Dickinsonadd28232010-01-21 19:51:08 +00001563 /* Summary of parsing results. After parsing, and dealing with zero
1564 * inputs, we have values s0, nd0, nd, e, sign, where:
Mark Dickinson45b63652010-01-16 18:10:25 +00001565 *
Mark Dickinsonadd28232010-01-21 19:51:08 +00001566 * - s0 points to the first significant digit of the input string
Mark Dickinson45b63652010-01-16 18:10:25 +00001567 *
1568 * - 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 Dickinsonadd28232010-01-21 19:51:08 +00001571 * and trailing zeros).
Mark Dickinson45b63652010-01-16 18:10:25 +00001572 *
Mark Dickinsonadd28232010-01-21 19:51:08 +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 Dickinson45b63652010-01-16 18:10:25 +00001578 *
1579 * - 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]
1583 *
1584 * - 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.
1590 *
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 Dickinsonadd28232010-01-21 19:51:08 +00001599 bc.e0 = e1 = e;
Mark Dickinson45b63652010-01-16 18:10:25 +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 Dickinsonb08a53a2009-04-16 19:52:09 +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 Dickinsonadd28232010-01-21 19:51:08 +00001652 if (e1 > DBL_MAX_10_EXP)
1653 goto ovfl;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +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) {
Mark Dickinsonadd28232010-01-21 19:51:08 +00001675 /* The input decimal value lies in [10**e1, 10**(e1+16)).
1676
1677 If e1 <= -512, underflow immediately.
1678 If e1 <= -256, set bc.scale to 2*P.
1679
1680 So for input value < 1e-256, bc.scale is always set;
1681 for input value >= 1e-240, bc.scale is never set.
1682 For input values in [1e-256, 1e-240), bc.scale may or may
1683 not be set. */
1684
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001685 e1 = -e1;
1686 if ((i = e1 & 15))
1687 dval(&rv) /= tens[i];
1688 if (e1 >>= 4) {
1689 if (e1 >= 1 << n_bigtens)
1690 goto undfl;
1691 if (e1 & Scale_Bit)
1692 bc.scale = 2*P;
1693 for(j = 0; e1 > 0; j++, e1 >>= 1)
1694 if (e1 & 1)
1695 dval(&rv) *= tinytens[j];
1696 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1697 >> Exp_shift)) > 0) {
1698 /* scaled rv is denormal; clear j low bits */
1699 if (j >= 32) {
1700 word1(&rv) = 0;
1701 if (j >= 53)
1702 word0(&rv) = (P+2)*Exp_msk1;
1703 else
1704 word0(&rv) &= 0xffffffff << (j-32);
1705 }
1706 else
1707 word1(&rv) &= 0xffffffff << j;
1708 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001709 if (!dval(&rv))
1710 goto undfl;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001711 }
1712 }
1713
1714 /* Now the hard part -- adjusting rv to the correct value.*/
1715
1716 /* Put digits into bd: true value = bd * 10^e */
1717
1718 bc.nd = nd;
Mark Dickinson81612e82010-01-12 23:04:19 +00001719 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001720 /* to silence an erroneous warning about bc.nd0 */
1721 /* possibly not being initialized. */
Mark Dickinson81612e82010-01-12 23:04:19 +00001722 if (nd > STRTOD_DIGLIM) {
1723 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001724 /* minimum number of decimal digits to distinguish double values */
1725 /* in IEEE arithmetic. */
Mark Dickinson45b63652010-01-16 18:10:25 +00001726
1727 /* Truncate input to 18 significant digits, then discard any trailing
1728 zeros on the result by updating nd, nd0, e and y suitably. (There's
1729 no need to update z; it's not reused beyond this point.) */
1730 for (i = 18; i > 0; ) {
1731 /* scan back until we hit a nonzero digit. significant digit 'i'
1732 is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001733 --i;
Mark Dickinson45b63652010-01-16 18:10:25 +00001734 if (s0[i < nd0 ? i : i+1] != '0') {
1735 ++i;
1736 break;
1737 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001738 }
1739 e += nd - i;
1740 nd = i;
1741 if (nd0 > nd)
1742 nd0 = nd;
1743 if (nd < 9) { /* must recompute y */
1744 y = 0;
1745 for(i = 0; i < nd0; ++i)
1746 y = 10*y + s0[i] - '0';
Mark Dickinson45b63652010-01-16 18:10:25 +00001747 for(; i < nd; ++i)
1748 y = 10*y + s0[i+1] - '0';
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001749 }
1750 }
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001751 bd0 = s2b(s0, nd0, nd, y);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001752 if (bd0 == NULL)
1753 goto failed_malloc;
1754
Mark Dickinsonadd28232010-01-21 19:51:08 +00001755 /* Notation for the comments below. Write:
1756
1757 - dv for the absolute value of the number represented by the original
1758 decimal input string.
1759
1760 - if we've truncated dv, write tdv for the truncated value.
1761 Otherwise, set tdv == dv.
1762
1763 - srv for the quantity rv/2^bc.scale; so srv is the current binary
1764 approximation to tdv (and dv). It should be exactly representable
1765 in an IEEE 754 double.
1766 */
1767
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001768 for(;;) {
Mark Dickinsonadd28232010-01-21 19:51:08 +00001769
1770 /* This is the main correction loop for _Py_dg_strtod.
1771
1772 We've got a decimal value tdv, and a floating-point approximation
1773 srv=rv/2^bc.scale to tdv. The aim is to determine whether srv is
1774 close enough (i.e., within 0.5 ulps) to tdv, and to compute a new
1775 approximation if not.
1776
1777 To determine whether srv is close enough to tdv, compute integers
1778 bd, bb and bs proportional to tdv, srv and 0.5 ulp(srv)
1779 respectively, and then use integer arithmetic to determine whether
1780 |tdv - srv| is less than, equal to, or greater than 0.5 ulp(srv).
1781 */
1782
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001783 bd = Balloc(bd0->k);
1784 if (bd == NULL) {
1785 Bfree(bd0);
1786 goto failed_malloc;
1787 }
1788 Bcopy(bd, bd0);
1789 bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
1790 if (bb == NULL) {
1791 Bfree(bd);
1792 Bfree(bd0);
1793 goto failed_malloc;
1794 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001795 /* tdv = bd * 10^e; srv = bb * 2^(bbe - scale) */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001796 bs = i2b(1);
1797 if (bs == NULL) {
1798 Bfree(bb);
1799 Bfree(bd);
1800 Bfree(bd0);
1801 goto failed_malloc;
1802 }
1803
1804 if (e >= 0) {
1805 bb2 = bb5 = 0;
1806 bd2 = bd5 = e;
1807 }
1808 else {
1809 bb2 = bb5 = -e;
1810 bd2 = bd5 = 0;
1811 }
1812 if (bbe >= 0)
1813 bb2 += bbe;
1814 else
1815 bd2 -= bbe;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001816
1817 /* At this stage e = bd2 - bb2 + bbe = bd5 - bb5, so:
1818
1819 tdv = bd * 2^(bbe + bd2 - bb2) * 5^(bd5 - bb5)
1820 srv = bb * 2^(bbe - scale).
1821
1822 Compute j such that
1823
1824 0.5 ulp(srv) = 2^(bbe - scale - j)
1825 */
1826
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001827 bs2 = bb2;
1828 j = bbe - bc.scale;
1829 i = j + bbbits - 1; /* logb(rv) */
1830 if (i < Emin) /* denormal */
1831 j += P - Emin;
1832 else
1833 j = P + 1 - bbbits;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001834
1835 /* Now we have:
1836
1837 M * tdv = bd * 2^(bd2 + scale + j) * 5^bd5
1838 M * srv = bb * 2^(bb2 + j) * 5^bb5
1839 M * 0.5 ulp(srv) = 2^bs2 * 5^bb5
1840
1841 where M is the constant (currently) represented by 2^(j + scale +
1842 bb2 - bbe) * 5^bb5.
1843 */
1844
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001845 bb2 += j;
1846 bd2 += j;
1847 bd2 += bc.scale;
Mark Dickinsonadd28232010-01-21 19:51:08 +00001848
1849 /* After the adjustments above, tdv, srv and 0.5 ulp(srv) are
1850 proportional to: bd * 2^bd2 * 5^bd5, bb * 2^bb2 * 5^bb5, and
1851 bs * 2^bs2 * 5^bb5, respectively. */
1852
1853 /* Remove excess powers of 2. i = min(bb2, bd2, bs2). */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001854 i = bb2 < bd2 ? bb2 : bd2;
1855 if (i > bs2)
1856 i = bs2;
1857 if (i > 0) {
1858 bb2 -= i;
1859 bd2 -= i;
1860 bs2 -= i;
1861 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001862
1863 /* Scale bb, bd, bs by the appropriate powers of 2 and 5. */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001864 if (bb5 > 0) {
1865 bs = pow5mult(bs, bb5);
1866 if (bs == NULL) {
1867 Bfree(bb);
1868 Bfree(bd);
1869 Bfree(bd0);
1870 goto failed_malloc;
1871 }
1872 bb1 = mult(bs, bb);
1873 Bfree(bb);
1874 bb = bb1;
1875 if (bb == NULL) {
1876 Bfree(bs);
1877 Bfree(bd);
1878 Bfree(bd0);
1879 goto failed_malloc;
1880 }
1881 }
1882 if (bb2 > 0) {
1883 bb = lshift(bb, bb2);
1884 if (bb == NULL) {
1885 Bfree(bs);
1886 Bfree(bd);
1887 Bfree(bd0);
1888 goto failed_malloc;
1889 }
1890 }
1891 if (bd5 > 0) {
1892 bd = pow5mult(bd, bd5);
1893 if (bd == NULL) {
1894 Bfree(bb);
1895 Bfree(bs);
1896 Bfree(bd0);
1897 goto failed_malloc;
1898 }
1899 }
1900 if (bd2 > 0) {
1901 bd = lshift(bd, bd2);
1902 if (bd == NULL) {
1903 Bfree(bb);
1904 Bfree(bs);
1905 Bfree(bd0);
1906 goto failed_malloc;
1907 }
1908 }
1909 if (bs2 > 0) {
1910 bs = lshift(bs, bs2);
1911 if (bs == NULL) {
1912 Bfree(bb);
1913 Bfree(bd);
1914 Bfree(bd0);
1915 goto failed_malloc;
1916 }
1917 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001918
1919 /* Now bd, bb and bs are scaled versions of tdv, srv and 0.5 ulp(srv),
1920 respectively. Compute the difference |tdv - srv|, and compare
1921 with 0.5 ulp(srv). */
1922
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001923 delta = diff(bb, bd);
1924 if (delta == NULL) {
1925 Bfree(bb);
1926 Bfree(bs);
1927 Bfree(bd);
1928 Bfree(bd0);
1929 goto failed_malloc;
1930 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00001931 dsign = delta->sign;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001932 delta->sign = 0;
1933 i = cmp(delta, bs);
1934 if (bc.nd > nd && i <= 0) {
Mark Dickinsonadd28232010-01-21 19:51:08 +00001935 if (dsign)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001936 break; /* Must use bigcomp(). */
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001937
1938 /* Here rv overestimates the truncated decimal value by at most
1939 0.5 ulp(rv). Hence rv either overestimates the true decimal
1940 value by <= 0.5 ulp(rv), or underestimates it by some small
1941 amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
1942 the true decimal value, so it's possible to exit.
1943
1944 Exception: if scaled rv is a normal exact power of 2, but not
1945 DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
1946 next double, so the correctly rounded result is either rv - 0.5
1947 ulp(rv) or rv; in this case, use bigcomp to distinguish. */
1948
1949 if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
1950 /* rv can't be 0, since it's an overestimate for some
1951 nonzero value. So rv is a normal power of 2. */
1952 j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
1953 /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
1954 rv / 2^bc.scale >= 2^-1021. */
1955 if (j - bc.scale >= 2) {
1956 dval(&rv) -= 0.5 * sulp(&rv, &bc);
Mark Dickinsonadd28232010-01-21 19:51:08 +00001957 break; /* Use bigcomp. */
Mark Dickinson853c3bb2010-01-14 15:37:49 +00001958 }
1959 }
1960
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001961 {
1962 bc.nd = nd;
1963 i = -1; /* Discarded digits make delta smaller. */
1964 }
1965 }
1966
1967 if (i < 0) {
1968 /* Error is less than half an ulp -- check for
1969 * special case of mantissa a power of two.
1970 */
Mark Dickinsonadd28232010-01-21 19:51:08 +00001971 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001972 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1973 ) {
1974 break;
1975 }
1976 if (!delta->x[0] && delta->wds <= 1) {
1977 /* exact result */
1978 break;
1979 }
1980 delta = lshift(delta,Log2P);
1981 if (delta == NULL) {
1982 Bfree(bb);
1983 Bfree(bs);
1984 Bfree(bd);
1985 Bfree(bd0);
1986 goto failed_malloc;
1987 }
1988 if (cmp(delta, bs) > 0)
1989 goto drop_down;
1990 break;
1991 }
1992 if (i == 0) {
1993 /* exactly half-way between */
Mark Dickinsonadd28232010-01-21 19:51:08 +00001994 if (dsign) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001995 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1996 && word1(&rv) == (
1997 (bc.scale &&
1998 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1999 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
2000 0xffffffff)) {
2001 /*boundary case -- increment exponent*/
2002 word0(&rv) = (word0(&rv) & Exp_mask)
2003 + Exp_msk1
2004 ;
2005 word1(&rv) = 0;
Mark Dickinsonadd28232010-01-21 19:51:08 +00002006 dsign = 0;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002007 break;
2008 }
2009 }
2010 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
2011 drop_down:
2012 /* boundary case -- decrement exponent */
2013 if (bc.scale) {
2014 L = word0(&rv) & Exp_mask;
2015 if (L <= (2*P+1)*Exp_msk1) {
2016 if (L > (P+2)*Exp_msk1)
2017 /* round even ==> */
2018 /* accept rv */
2019 break;
2020 /* rv = smallest denormal */
Mark Dickinsonadd28232010-01-21 19:51:08 +00002021 if (bc.nd > nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002022 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002023 goto undfl;
2024 }
2025 }
2026 L = (word0(&rv) & Exp_mask) - Exp_msk1;
2027 word0(&rv) = L | Bndry_mask1;
2028 word1(&rv) = 0xffffffff;
2029 break;
2030 }
2031 if (!(word1(&rv) & LSB))
2032 break;
Mark Dickinsonadd28232010-01-21 19:51:08 +00002033 if (dsign)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002034 dval(&rv) += ulp(&rv);
2035 else {
2036 dval(&rv) -= ulp(&rv);
2037 if (!dval(&rv)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00002038 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002039 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002040 goto undfl;
2041 }
2042 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00002043 dsign = 1 - dsign;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002044 break;
2045 }
2046 if ((aadj = ratio(delta, bs)) <= 2.) {
Mark Dickinsonadd28232010-01-21 19:51:08 +00002047 if (dsign)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002048 aadj = aadj1 = 1.;
2049 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
2050 if (word1(&rv) == Tiny1 && !word0(&rv)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00002051 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002052 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002053 goto undfl;
2054 }
2055 aadj = 1.;
2056 aadj1 = -1.;
2057 }
2058 else {
2059 /* special case -- power of FLT_RADIX to be */
2060 /* rounded down... */
2061
2062 if (aadj < 2./FLT_RADIX)
2063 aadj = 1./FLT_RADIX;
2064 else
2065 aadj *= 0.5;
2066 aadj1 = -aadj;
2067 }
2068 }
2069 else {
2070 aadj *= 0.5;
Mark Dickinsonadd28232010-01-21 19:51:08 +00002071 aadj1 = dsign ? aadj : -aadj;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002072 if (Flt_Rounds == 0)
2073 aadj1 += 0.5;
2074 }
2075 y = word0(&rv) & Exp_mask;
2076
2077 /* Check for overflow */
2078
2079 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
2080 dval(&rv0) = dval(&rv);
2081 word0(&rv) -= P*Exp_msk1;
2082 adj.d = aadj1 * ulp(&rv);
2083 dval(&rv) += adj.d;
2084 if ((word0(&rv) & Exp_mask) >=
2085 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
Mark Dickinsonc4f18682010-01-17 14:39:12 +00002086 if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
2087 Bfree(bb);
2088 Bfree(bd);
2089 Bfree(bs);
2090 Bfree(bd0);
2091 Bfree(delta);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002092 goto ovfl;
Mark Dickinsonc4f18682010-01-17 14:39:12 +00002093 }
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002094 word0(&rv) = Big0;
2095 word1(&rv) = Big1;
2096 goto cont;
2097 }
2098 else
2099 word0(&rv) += P*Exp_msk1;
2100 }
2101 else {
2102 if (bc.scale && y <= 2*P*Exp_msk1) {
2103 if (aadj <= 0x7fffffff) {
2104 if ((z = (ULong)aadj) <= 0)
2105 z = 1;
2106 aadj = z;
Mark Dickinsonadd28232010-01-21 19:51:08 +00002107 aadj1 = dsign ? aadj : -aadj;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002108 }
2109 dval(&aadj2) = aadj1;
2110 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
2111 aadj1 = dval(&aadj2);
2112 }
2113 adj.d = aadj1 * ulp(&rv);
2114 dval(&rv) += adj.d;
2115 }
2116 z = word0(&rv) & Exp_mask;
2117 if (bc.nd == nd) {
2118 if (!bc.scale)
2119 if (y == z) {
2120 /* Can we stop now? */
2121 L = (Long)aadj;
2122 aadj -= L;
2123 /* The tolerances below are conservative. */
Mark Dickinsonadd28232010-01-21 19:51:08 +00002124 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002125 if (aadj < .4999999 || aadj > .5000001)
2126 break;
2127 }
2128 else if (aadj < .4999999/FLT_RADIX)
2129 break;
2130 }
2131 }
2132 cont:
2133 Bfree(bb);
2134 Bfree(bd);
2135 Bfree(bs);
2136 Bfree(delta);
2137 }
2138 Bfree(bb);
2139 Bfree(bd);
2140 Bfree(bs);
2141 Bfree(bd0);
2142 Bfree(delta);
2143 if (bc.nd > nd) {
2144 error = bigcomp(&rv, s0, &bc);
2145 if (error)
2146 goto failed_malloc;
2147 }
2148
2149 if (bc.scale) {
2150 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
2151 word1(&rv0) = 0;
2152 dval(&rv) *= dval(&rv0);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002153 }
Mark Dickinsonadd28232010-01-21 19:51:08 +00002154
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002155 ret:
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002156 return sign ? -dval(&rv) : dval(&rv);
2157
Mark Dickinsonadd28232010-01-21 19:51:08 +00002158 parse_error:
2159 return 0.0;
2160
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002161 failed_malloc:
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002162 errno = ENOMEM;
2163 return -1.0;
Mark Dickinsonadd28232010-01-21 19:51:08 +00002164
2165 undfl:
2166 return sign ? -0.0 : 0.0;
2167
2168 ovfl:
2169 errno = ERANGE;
2170 /* Can't trust HUGE_VAL */
2171 word0(&rv) = Exp_mask;
2172 word1(&rv) = 0;
2173 return sign ? -dval(&rv) : dval(&rv);
2174
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00002175}
2176
2177static char *
2178rv_alloc(int i)
2179{
2180 int j, k, *r;
2181
2182 j = sizeof(ULong);
2183 for(k = 0;
2184 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
2185 j <<= 1)
2186 k++;
2187 r = (int*)Balloc(k);
2188 if (r == NULL)
2189 return NULL;
2190 *r = k;
2191 return (char *)(r+1);
2192}
2193
2194static char *
2195nrv_alloc(char *s, char **rve, int n)
2196{
2197 char *rv, *t;
2198
2199 rv = rv_alloc(n);
2200 if (rv == NULL)
2201 return NULL;
2202 t = rv;
2203 while((*t = *s++)) t++;
2204 if (rve)
2205 *rve = t;
2206 return rv;
2207}
2208
2209/* freedtoa(s) must be used to free values s returned by dtoa
2210 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
2211 * but for consistency with earlier versions of dtoa, it is optional
2212 * when MULTIPLE_THREADS is not defined.
2213 */
2214
2215void
2216_Py_dg_freedtoa(char *s)
2217{
2218 Bigint *b = (Bigint *)((int *)s - 1);
2219 b->maxwds = 1 << (b->k = *(int*)b);
2220 Bfree(b);
2221}
2222
2223/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
2224 *
2225 * Inspired by "How to Print Floating-Point Numbers Accurately" by
2226 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
2227 *
2228 * Modifications:
2229 * 1. Rather than iterating, we use a simple numeric overestimate
2230 * to determine k = floor(log10(d)). We scale relevant
2231 * quantities using O(log2(k)) rather than O(k) multiplications.
2232 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
2233 * try to generate digits strictly left to right. Instead, we
2234 * compute with fewer bits and propagate the carry if necessary
2235 * when rounding the final digit up. This is often faster.
2236 * 3. Under the assumption that input will be rounded nearest,
2237 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
2238 * That is, we allow equality in stopping tests when the
2239 * round-nearest rule will give the same floating-point value
2240 * as would satisfaction of the stopping test with strict
2241 * inequality.
2242 * 4. We remove common factors of powers of 2 from relevant
2243 * quantities.
2244 * 5. When converting floating-point integers less than 1e16,
2245 * we use floating-point arithmetic rather than resorting
2246 * to multiple-precision integers.
2247 * 6. When asked to produce fewer than 15 digits, we first try
2248 * to get by with floating-point arithmetic; we resort to
2249 * multiple-precision integer arithmetic only if we cannot
2250 * guarantee that the floating-point calculation has given
2251 * the correctly rounded result. For k requested digits and
2252 * "uniformly" distributed input, the probability is
2253 * something like 10^(k-15) that we must resort to the Long
2254 * calculation.
2255 */
2256
2257/* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2258 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2259 call to _Py_dg_freedtoa. */
2260
2261char *
2262_Py_dg_dtoa(double dd, int mode, int ndigits,
2263 int *decpt, int *sign, char **rve)
2264{
2265 /* Arguments ndigits, decpt, sign are similar to those
2266 of ecvt and fcvt; trailing zeros are suppressed from
2267 the returned string. If not null, *rve is set to point
2268 to the end of the return value. If d is +-Infinity or NaN,
2269 then *decpt is set to 9999.
2270
2271 mode:
2272 0 ==> shortest string that yields d when read in
2273 and rounded to nearest.
2274 1 ==> like 0, but with Steele & White stopping rule;
2275 e.g. with IEEE P754 arithmetic , mode 0 gives
2276 1e23 whereas mode 1 gives 9.999999999999999e22.
2277 2 ==> max(1,ndigits) significant digits. This gives a
2278 return value similar to that of ecvt, except
2279 that trailing zeros are suppressed.
2280 3 ==> through ndigits past the decimal point. This
2281 gives a return value similar to that from fcvt,
2282 except that trailing zeros are suppressed, and
2283 ndigits can be negative.
2284 4,5 ==> similar to 2 and 3, respectively, but (in
2285 round-nearest mode) with the tests of mode 0 to
2286 possibly return a shorter string that rounds to d.
2287 With IEEE arithmetic and compilation with
2288 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2289 as modes 2 and 3 when FLT_ROUNDS != 1.
2290 6-9 ==> Debugging modes similar to mode - 4: don't try
2291 fast floating-point estimate (if applicable).
2292
2293 Values of mode other than 0-9 are treated as mode 0.
2294
2295 Sufficient space is allocated to the return value
2296 to hold the suppressed trailing zeros.
2297 */
2298
2299 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2300 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2301 spec_case, try_quick;
2302 Long L;
2303 int denorm;
2304 ULong x;
2305 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2306 U d2, eps, u;
2307 double ds;
2308 char *s, *s0;
2309
2310 /* set pointers to NULL, to silence gcc compiler warnings and make
2311 cleanup easier on error */
2312 mlo = mhi = b = S = 0;
2313 s0 = 0;
2314
2315 u.d = dd;
2316 if (word0(&u) & Sign_bit) {
2317 /* set sign for everything, including 0's and NaNs */
2318 *sign = 1;
2319 word0(&u) &= ~Sign_bit; /* clear sign bit */
2320 }
2321 else
2322 *sign = 0;
2323
2324 /* quick return for Infinities, NaNs and zeros */
2325 if ((word0(&u) & Exp_mask) == Exp_mask)
2326 {
2327 /* Infinity or NaN */
2328 *decpt = 9999;
2329 if (!word1(&u) && !(word0(&u) & 0xfffff))
2330 return nrv_alloc("Infinity", rve, 8);
2331 return nrv_alloc("NaN", rve, 3);
2332 }
2333 if (!dval(&u)) {
2334 *decpt = 1;
2335 return nrv_alloc("0", rve, 1);
2336 }
2337
2338 /* compute k = floor(log10(d)). The computation may leave k
2339 one too large, but should never leave k too small. */
2340 b = d2b(&u, &be, &bbits);
2341 if (b == NULL)
2342 goto failed_malloc;
2343 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2344 dval(&d2) = dval(&u);
2345 word0(&d2) &= Frac_mask1;
2346 word0(&d2) |= Exp_11;
2347
2348 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2349 * log10(x) = log(x) / log(10)
2350 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2351 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2352 *
2353 * This suggests computing an approximation k to log10(d) by
2354 *
2355 * k = (i - Bias)*0.301029995663981
2356 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2357 *
2358 * We want k to be too large rather than too small.
2359 * The error in the first-order Taylor series approximation
2360 * is in our favor, so we just round up the constant enough
2361 * to compensate for any error in the multiplication of
2362 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2363 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2364 * adding 1e-13 to the constant term more than suffices.
2365 * Hence we adjust the constant term to 0.1760912590558.
2366 * (We could get a more accurate k by invoking log10,
2367 * but this is probably not worthwhile.)
2368 */
2369
2370 i -= Bias;
2371 denorm = 0;
2372 }
2373 else {
2374 /* d is denormalized */
2375
2376 i = bbits + be + (Bias + (P-1) - 1);
2377 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2378 : word1(&u) << (32 - i);
2379 dval(&d2) = x;
2380 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2381 i -= (Bias + (P-1) - 1) + 1;
2382 denorm = 1;
2383 }
2384 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2385 i*0.301029995663981;
2386 k = (int)ds;
2387 if (ds < 0. && ds != k)
2388 k--; /* want k = floor(ds) */
2389 k_check = 1;
2390 if (k >= 0 && k <= Ten_pmax) {
2391 if (dval(&u) < tens[k])
2392 k--;
2393 k_check = 0;
2394 }
2395 j = bbits - i - 1;
2396 if (j >= 0) {
2397 b2 = 0;
2398 s2 = j;
2399 }
2400 else {
2401 b2 = -j;
2402 s2 = 0;
2403 }
2404 if (k >= 0) {
2405 b5 = 0;
2406 s5 = k;
2407 s2 += k;
2408 }
2409 else {
2410 b2 -= k;
2411 b5 = -k;
2412 s5 = 0;
2413 }
2414 if (mode < 0 || mode > 9)
2415 mode = 0;
2416
2417 try_quick = 1;
2418
2419 if (mode > 5) {
2420 mode -= 4;
2421 try_quick = 0;
2422 }
2423 leftright = 1;
2424 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2425 /* silence erroneous "gcc -Wall" warning. */
2426 switch(mode) {
2427 case 0:
2428 case 1:
2429 i = 18;
2430 ndigits = 0;
2431 break;
2432 case 2:
2433 leftright = 0;
2434 /* no break */
2435 case 4:
2436 if (ndigits <= 0)
2437 ndigits = 1;
2438 ilim = ilim1 = i = ndigits;
2439 break;
2440 case 3:
2441 leftright = 0;
2442 /* no break */
2443 case 5:
2444 i = ndigits + k + 1;
2445 ilim = i;
2446 ilim1 = i - 1;
2447 if (i <= 0)
2448 i = 1;
2449 }
2450 s0 = rv_alloc(i);
2451 if (s0 == NULL)
2452 goto failed_malloc;
2453 s = s0;
2454
2455
2456 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2457
2458 /* Try to get by with floating-point arithmetic. */
2459
2460 i = 0;
2461 dval(&d2) = dval(&u);
2462 k0 = k;
2463 ilim0 = ilim;
2464 ieps = 2; /* conservative */
2465 if (k > 0) {
2466 ds = tens[k&0xf];
2467 j = k >> 4;
2468 if (j & Bletch) {
2469 /* prevent overflows */
2470 j &= Bletch - 1;
2471 dval(&u) /= bigtens[n_bigtens-1];
2472 ieps++;
2473 }
2474 for(; j; j >>= 1, i++)
2475 if (j & 1) {
2476 ieps++;
2477 ds *= bigtens[i];
2478 }
2479 dval(&u) /= ds;
2480 }
2481 else if ((j1 = -k)) {
2482 dval(&u) *= tens[j1 & 0xf];
2483 for(j = j1 >> 4; j; j >>= 1, i++)
2484 if (j & 1) {
2485 ieps++;
2486 dval(&u) *= bigtens[i];
2487 }
2488 }
2489 if (k_check && dval(&u) < 1. && ilim > 0) {
2490 if (ilim1 <= 0)
2491 goto fast_failed;
2492 ilim = ilim1;
2493 k--;
2494 dval(&u) *= 10.;
2495 ieps++;
2496 }
2497 dval(&eps) = ieps*dval(&u) + 7.;
2498 word0(&eps) -= (P-1)*Exp_msk1;
2499 if (ilim == 0) {
2500 S = mhi = 0;
2501 dval(&u) -= 5.;
2502 if (dval(&u) > dval(&eps))
2503 goto one_digit;
2504 if (dval(&u) < -dval(&eps))
2505 goto no_digits;
2506 goto fast_failed;
2507 }
2508 if (leftright) {
2509 /* Use Steele & White method of only
2510 * generating digits needed.
2511 */
2512 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2513 for(i = 0;;) {
2514 L = (Long)dval(&u);
2515 dval(&u) -= L;
2516 *s++ = '0' + (int)L;
2517 if (dval(&u) < dval(&eps))
2518 goto ret1;
2519 if (1. - dval(&u) < dval(&eps))
2520 goto bump_up;
2521 if (++i >= ilim)
2522 break;
2523 dval(&eps) *= 10.;
2524 dval(&u) *= 10.;
2525 }
2526 }
2527 else {
2528 /* Generate ilim digits, then fix them up. */
2529 dval(&eps) *= tens[ilim-1];
2530 for(i = 1;; i++, dval(&u) *= 10.) {
2531 L = (Long)(dval(&u));
2532 if (!(dval(&u) -= L))
2533 ilim = i;
2534 *s++ = '0' + (int)L;
2535 if (i == ilim) {
2536 if (dval(&u) > 0.5 + dval(&eps))
2537 goto bump_up;
2538 else if (dval(&u) < 0.5 - dval(&eps)) {
2539 while(*--s == '0');
2540 s++;
2541 goto ret1;
2542 }
2543 break;
2544 }
2545 }
2546 }
2547 fast_failed:
2548 s = s0;
2549 dval(&u) = dval(&d2);
2550 k = k0;
2551 ilim = ilim0;
2552 }
2553
2554 /* Do we have a "small" integer? */
2555
2556 if (be >= 0 && k <= Int_max) {
2557 /* Yes. */
2558 ds = tens[k];
2559 if (ndigits < 0 && ilim <= 0) {
2560 S = mhi = 0;
2561 if (ilim < 0 || dval(&u) <= 5*ds)
2562 goto no_digits;
2563 goto one_digit;
2564 }
2565 for(i = 1;; i++, dval(&u) *= 10.) {
2566 L = (Long)(dval(&u) / ds);
2567 dval(&u) -= L*ds;
2568 *s++ = '0' + (int)L;
2569 if (!dval(&u)) {
2570 break;
2571 }
2572 if (i == ilim) {
2573 dval(&u) += dval(&u);
2574 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2575 bump_up:
2576 while(*--s == '9')
2577 if (s == s0) {
2578 k++;
2579 *s = '0';
2580 break;
2581 }
2582 ++*s++;
2583 }
2584 break;
2585 }
2586 }
2587 goto ret1;
2588 }
2589
2590 m2 = b2;
2591 m5 = b5;
2592 if (leftright) {
2593 i =
2594 denorm ? be + (Bias + (P-1) - 1 + 1) :
2595 1 + P - bbits;
2596 b2 += i;
2597 s2 += i;
2598 mhi = i2b(1);
2599 if (mhi == NULL)
2600 goto failed_malloc;
2601 }
2602 if (m2 > 0 && s2 > 0) {
2603 i = m2 < s2 ? m2 : s2;
2604 b2 -= i;
2605 m2 -= i;
2606 s2 -= i;
2607 }
2608 if (b5 > 0) {
2609 if (leftright) {
2610 if (m5 > 0) {
2611 mhi = pow5mult(mhi, m5);
2612 if (mhi == NULL)
2613 goto failed_malloc;
2614 b1 = mult(mhi, b);
2615 Bfree(b);
2616 b = b1;
2617 if (b == NULL)
2618 goto failed_malloc;
2619 }
2620 if ((j = b5 - m5)) {
2621 b = pow5mult(b, j);
2622 if (b == NULL)
2623 goto failed_malloc;
2624 }
2625 }
2626 else {
2627 b = pow5mult(b, b5);
2628 if (b == NULL)
2629 goto failed_malloc;
2630 }
2631 }
2632 S = i2b(1);
2633 if (S == NULL)
2634 goto failed_malloc;
2635 if (s5 > 0) {
2636 S = pow5mult(S, s5);
2637 if (S == NULL)
2638 goto failed_malloc;
2639 }
2640
2641 /* Check for special case that d is a normalized power of 2. */
2642
2643 spec_case = 0;
2644 if ((mode < 2 || leftright)
2645 ) {
2646 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2647 && word0(&u) & (Exp_mask & ~Exp_msk1)
2648 ) {
2649 /* The special case */
2650 b2 += Log2P;
2651 s2 += Log2P;
2652 spec_case = 1;
2653 }
2654 }
2655
2656 /* Arrange for convenient computation of quotients:
2657 * shift left if necessary so divisor has 4 leading 0 bits.
2658 *
2659 * Perhaps we should just compute leading 28 bits of S once
2660 * and for all and pass them and a shift to quorem, so it
2661 * can do shifts and ors to compute the numerator for q.
2662 */
2663 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
2664 i = 32 - i;
2665#define iInc 28
2666 i = dshift(S, s2);
2667 b2 += i;
2668 m2 += i;
2669 s2 += i;
2670 if (b2 > 0) {
2671 b = lshift(b, b2);
2672 if (b == NULL)
2673 goto failed_malloc;
2674 }
2675 if (s2 > 0) {
2676 S = lshift(S, s2);
2677 if (S == NULL)
2678 goto failed_malloc;
2679 }
2680 if (k_check) {
2681 if (cmp(b,S) < 0) {
2682 k--;
2683 b = multadd(b, 10, 0); /* we botched the k estimate */
2684 if (b == NULL)
2685 goto failed_malloc;
2686 if (leftright) {
2687 mhi = multadd(mhi, 10, 0);
2688 if (mhi == NULL)
2689 goto failed_malloc;
2690 }
2691 ilim = ilim1;
2692 }
2693 }
2694 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2695 if (ilim < 0) {
2696 /* no digits, fcvt style */
2697 no_digits:
2698 k = -1 - ndigits;
2699 goto ret;
2700 }
2701 else {
2702 S = multadd(S, 5, 0);
2703 if (S == NULL)
2704 goto failed_malloc;
2705 if (cmp(b, S) <= 0)
2706 goto no_digits;
2707 }
2708 one_digit:
2709 *s++ = '1';
2710 k++;
2711 goto ret;
2712 }
2713 if (leftright) {
2714 if (m2 > 0) {
2715 mhi = lshift(mhi, m2);
2716 if (mhi == NULL)
2717 goto failed_malloc;
2718 }
2719
2720 /* Compute mlo -- check for special case
2721 * that d is a normalized power of 2.
2722 */
2723
2724 mlo = mhi;
2725 if (spec_case) {
2726 mhi = Balloc(mhi->k);
2727 if (mhi == NULL)
2728 goto failed_malloc;
2729 Bcopy(mhi, mlo);
2730 mhi = lshift(mhi, Log2P);
2731 if (mhi == NULL)
2732 goto failed_malloc;
2733 }
2734
2735 for(i = 1;;i++) {
2736 dig = quorem(b,S) + '0';
2737 /* Do we yet have the shortest decimal string
2738 * that will round to d?
2739 */
2740 j = cmp(b, mlo);
2741 delta = diff(S, mhi);
2742 if (delta == NULL)
2743 goto failed_malloc;
2744 j1 = delta->sign ? 1 : cmp(b, delta);
2745 Bfree(delta);
2746 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2747 ) {
2748 if (dig == '9')
2749 goto round_9_up;
2750 if (j > 0)
2751 dig++;
2752 *s++ = dig;
2753 goto ret;
2754 }
2755 if (j < 0 || (j == 0 && mode != 1
2756 && !(word1(&u) & 1)
2757 )) {
2758 if (!b->x[0] && b->wds <= 1) {
2759 goto accept_dig;
2760 }
2761 if (j1 > 0) {
2762 b = lshift(b, 1);
2763 if (b == NULL)
2764 goto failed_malloc;
2765 j1 = cmp(b, S);
2766 if ((j1 > 0 || (j1 == 0 && dig & 1))
2767 && dig++ == '9')
2768 goto round_9_up;
2769 }
2770 accept_dig:
2771 *s++ = dig;
2772 goto ret;
2773 }
2774 if (j1 > 0) {
2775 if (dig == '9') { /* possible if i == 1 */
2776 round_9_up:
2777 *s++ = '9';
2778 goto roundoff;
2779 }
2780 *s++ = dig + 1;
2781 goto ret;
2782 }
2783 *s++ = dig;
2784 if (i == ilim)
2785 break;
2786 b = multadd(b, 10, 0);
2787 if (b == NULL)
2788 goto failed_malloc;
2789 if (mlo == mhi) {
2790 mlo = mhi = multadd(mhi, 10, 0);
2791 if (mlo == NULL)
2792 goto failed_malloc;
2793 }
2794 else {
2795 mlo = multadd(mlo, 10, 0);
2796 if (mlo == NULL)
2797 goto failed_malloc;
2798 mhi = multadd(mhi, 10, 0);
2799 if (mhi == NULL)
2800 goto failed_malloc;
2801 }
2802 }
2803 }
2804 else
2805 for(i = 1;; i++) {
2806 *s++ = dig = quorem(b,S) + '0';
2807 if (!b->x[0] && b->wds <= 1) {
2808 goto ret;
2809 }
2810 if (i >= ilim)
2811 break;
2812 b = multadd(b, 10, 0);
2813 if (b == NULL)
2814 goto failed_malloc;
2815 }
2816
2817 /* Round off last digit */
2818
2819 b = lshift(b, 1);
2820 if (b == NULL)
2821 goto failed_malloc;
2822 j = cmp(b, S);
2823 if (j > 0 || (j == 0 && dig & 1)) {
2824 roundoff:
2825 while(*--s == '9')
2826 if (s == s0) {
2827 k++;
2828 *s++ = '1';
2829 goto ret;
2830 }
2831 ++*s++;
2832 }
2833 else {
2834 while(*--s == '0');
2835 s++;
2836 }
2837 ret:
2838 Bfree(S);
2839 if (mhi) {
2840 if (mlo && mlo != mhi)
2841 Bfree(mlo);
2842 Bfree(mhi);
2843 }
2844 ret1:
2845 Bfree(b);
2846 *s = 0;
2847 *decpt = k + 1;
2848 if (rve)
2849 *rve = s;
2850 return s0;
2851 failed_malloc:
2852 if (S)
2853 Bfree(S);
2854 if (mlo && mlo != mhi)
2855 Bfree(mlo);
2856 if (mhi)
2857 Bfree(mhi);
2858 if (b)
2859 Bfree(b);
2860 if (s0)
2861 _Py_dg_freedtoa(s0);
2862 return NULL;
2863}
2864#ifdef __cplusplus
2865}
2866#endif
2867
2868#endif /* PY_NO_SHORT_FLOAT_REPR */