blob: 8389eb2352af19f9981774d2045c57b37871c3ef [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 Dickinsond2a99402010-01-13 22:20:10 +0000273 int dsign, 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
311/* Memory management: memory is allocated from, and returned to, Kmax+1 pools
312 of memory, where pool k (0 <= k <= Kmax) is for Bigints b with b->maxwds ==
313 1 << k. These pools are maintained as linked lists, with freelist[k]
314 pointing to the head of the list for pool k.
315
316 On allocation, if there's no free slot in the appropriate pool, MALLOC is
317 called to get more memory. This memory is not returned to the system until
318 Python quits. There's also a private memory pool that's allocated from
319 in preference to using MALLOC.
320
321 For Bigints with more than (1 << Kmax) digits (which implies at least 1233
322 decimal digits), memory is directly allocated using MALLOC, and freed using
323 FREE.
324
325 XXX: it would be easy to bypass this memory-management system and
326 translate each call to Balloc into a call to PyMem_Malloc, and each
327 Bfree to PyMem_Free. Investigate whether this has any significant
328 performance on impact. */
329
330static Bigint *freelist[Kmax+1];
331
332/* Allocate space for a Bigint with up to 1<<k digits */
333
334static Bigint *
335Balloc(int k)
336{
337 int x;
338 Bigint *rv;
339 unsigned int len;
340
341 if (k <= Kmax && (rv = freelist[k]))
342 freelist[k] = rv->next;
343 else {
344 x = 1 << k;
345 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
346 /sizeof(double);
347 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
348 rv = (Bigint*)pmem_next;
349 pmem_next += len;
350 }
351 else {
352 rv = (Bigint*)MALLOC(len*sizeof(double));
353 if (rv == NULL)
354 return NULL;
355 }
356 rv->k = k;
357 rv->maxwds = x;
358 }
359 rv->sign = rv->wds = 0;
360 return rv;
361}
362
363/* Free a Bigint allocated with Balloc */
364
365static void
366Bfree(Bigint *v)
367{
368 if (v) {
369 if (v->k > Kmax)
370 FREE((void*)v);
371 else {
372 v->next = freelist[v->k];
373 freelist[v->k] = v;
374 }
375 }
376}
377
378#define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
379 y->wds*sizeof(Long) + 2*sizeof(int))
380
381/* Multiply a Bigint b by m and add a. Either modifies b in place and returns
382 a pointer to the modified b, or Bfrees b and returns a pointer to a copy.
383 On failure, return NULL. In this case, b will have been already freed. */
384
385static Bigint *
386multadd(Bigint *b, int m, int a) /* multiply by m and add a */
387{
388 int i, wds;
389#ifdef ULLong
390 ULong *x;
391 ULLong carry, y;
392#else
393 ULong carry, *x, y;
394 ULong xi, z;
395#endif
396 Bigint *b1;
397
398 wds = b->wds;
399 x = b->x;
400 i = 0;
401 carry = a;
402 do {
403#ifdef ULLong
404 y = *x * (ULLong)m + carry;
405 carry = y >> 32;
406 *x++ = (ULong)(y & FFFFFFFF);
407#else
408 xi = *x;
409 y = (xi & 0xffff) * m + carry;
410 z = (xi >> 16) * m + (y >> 16);
411 carry = z >> 16;
412 *x++ = (z << 16) + (y & 0xffff);
413#endif
414 }
415 while(++i < wds);
416 if (carry) {
417 if (wds >= b->maxwds) {
418 b1 = Balloc(b->k+1);
419 if (b1 == NULL){
420 Bfree(b);
421 return NULL;
422 }
423 Bcopy(b1, b);
424 Bfree(b);
425 b = b1;
426 }
427 b->x[wds++] = (ULong)carry;
428 b->wds = wds;
429 }
430 return b;
431}
432
433/* convert a string s containing nd decimal digits (possibly containing a
434 decimal separator at position nd0, which is ignored) to a Bigint. This
435 function carries on where the parsing code in _Py_dg_strtod leaves off: on
436 entry, y9 contains the result of converting the first 9 digits. Returns
437 NULL on failure. */
438
439static Bigint *
Mark Dickinsond2a99402010-01-13 22:20:10 +0000440s2b(const char *s, int nd0, int nd, ULong y9)
Mark Dickinsonbb282852009-10-24 12:13:30 +0000441{
442 Bigint *b;
443 int i, k;
444 Long x, y;
445
446 x = (nd + 8) / 9;
447 for(k = 0, y = 1; x > y; y <<= 1, k++) ;
448 b = Balloc(k);
449 if (b == NULL)
450 return NULL;
451 b->x[0] = y9;
452 b->wds = 1;
453
Mark Dickinsond2a99402010-01-13 22:20:10 +0000454 if (nd <= 9)
455 return b;
456
457 s += 9;
458 for (i = 9; i < nd0; i++) {
459 b = multadd(b, 10, *s++ - '0');
460 if (b == NULL)
461 return NULL;
Mark Dickinsonbb282852009-10-24 12:13:30 +0000462 }
Mark Dickinsond2a99402010-01-13 22:20:10 +0000463 s++;
Mark Dickinsonbb282852009-10-24 12:13:30 +0000464 for(; i < nd; i++) {
465 b = multadd(b, 10, *s++ - '0');
466 if (b == NULL)
467 return NULL;
468 }
469 return b;
470}
471
472/* count leading 0 bits in the 32-bit integer x. */
473
474static int
475hi0bits(ULong x)
476{
477 int k = 0;
478
479 if (!(x & 0xffff0000)) {
480 k = 16;
481 x <<= 16;
482 }
483 if (!(x & 0xff000000)) {
484 k += 8;
485 x <<= 8;
486 }
487 if (!(x & 0xf0000000)) {
488 k += 4;
489 x <<= 4;
490 }
491 if (!(x & 0xc0000000)) {
492 k += 2;
493 x <<= 2;
494 }
495 if (!(x & 0x80000000)) {
496 k++;
497 if (!(x & 0x40000000))
498 return 32;
499 }
500 return k;
501}
502
503/* count trailing 0 bits in the 32-bit integer y, and shift y right by that
504 number of bits. */
505
506static int
507lo0bits(ULong *y)
508{
509 int k;
510 ULong x = *y;
511
512 if (x & 7) {
513 if (x & 1)
514 return 0;
515 if (x & 2) {
516 *y = x >> 1;
517 return 1;
518 }
519 *y = x >> 2;
520 return 2;
521 }
522 k = 0;
523 if (!(x & 0xffff)) {
524 k = 16;
525 x >>= 16;
526 }
527 if (!(x & 0xff)) {
528 k += 8;
529 x >>= 8;
530 }
531 if (!(x & 0xf)) {
532 k += 4;
533 x >>= 4;
534 }
535 if (!(x & 0x3)) {
536 k += 2;
537 x >>= 2;
538 }
539 if (!(x & 1)) {
540 k++;
541 x >>= 1;
542 if (!x)
543 return 32;
544 }
545 *y = x;
546 return k;
547}
548
549/* convert a small nonnegative integer to a Bigint */
550
551static Bigint *
552i2b(int i)
553{
554 Bigint *b;
555
556 b = Balloc(1);
557 if (b == NULL)
558 return NULL;
559 b->x[0] = i;
560 b->wds = 1;
561 return b;
562}
563
564/* multiply two Bigints. Returns a new Bigint, or NULL on failure. Ignores
565 the signs of a and b. */
566
567static Bigint *
568mult(Bigint *a, Bigint *b)
569{
570 Bigint *c;
571 int k, wa, wb, wc;
572 ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
573 ULong y;
574#ifdef ULLong
575 ULLong carry, z;
576#else
577 ULong carry, z;
578 ULong z2;
579#endif
580
581 if (a->wds < b->wds) {
582 c = a;
583 a = b;
584 b = c;
585 }
586 k = a->k;
587 wa = a->wds;
588 wb = b->wds;
589 wc = wa + wb;
590 if (wc > a->maxwds)
591 k++;
592 c = Balloc(k);
593 if (c == NULL)
594 return NULL;
595 for(x = c->x, xa = x + wc; x < xa; x++)
596 *x = 0;
597 xa = a->x;
598 xae = xa + wa;
599 xb = b->x;
600 xbe = xb + wb;
601 xc0 = c->x;
602#ifdef ULLong
603 for(; xb < xbe; xc0++) {
604 if ((y = *xb++)) {
605 x = xa;
606 xc = xc0;
607 carry = 0;
608 do {
609 z = *x++ * (ULLong)y + *xc + carry;
610 carry = z >> 32;
611 *xc++ = (ULong)(z & FFFFFFFF);
612 }
613 while(x < xae);
614 *xc = (ULong)carry;
615 }
616 }
617#else
618 for(; xb < xbe; xb++, xc0++) {
619 if (y = *xb & 0xffff) {
620 x = xa;
621 xc = xc0;
622 carry = 0;
623 do {
624 z = (*x & 0xffff) * y + (*xc & 0xffff) + carry;
625 carry = z >> 16;
626 z2 = (*x++ >> 16) * y + (*xc >> 16) + carry;
627 carry = z2 >> 16;
628 Storeinc(xc, z2, z);
629 }
630 while(x < xae);
631 *xc = carry;
632 }
633 if (y = *xb >> 16) {
634 x = xa;
635 xc = xc0;
636 carry = 0;
637 z2 = *xc;
638 do {
639 z = (*x & 0xffff) * y + (*xc >> 16) + carry;
640 carry = z >> 16;
641 Storeinc(xc, z, z2);
642 z2 = (*x++ >> 16) * y + (*xc & 0xffff) + carry;
643 carry = z2 >> 16;
644 }
645 while(x < xae);
646 *xc = z2;
647 }
648 }
649#endif
650 for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
651 c->wds = wc;
652 return c;
653}
654
655/* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */
656
657static Bigint *p5s;
658
659/* multiply the Bigint b by 5**k. Returns a pointer to the result, or NULL on
660 failure; if the returned pointer is distinct from b then the original
661 Bigint b will have been Bfree'd. Ignores the sign of b. */
662
663static Bigint *
664pow5mult(Bigint *b, int k)
665{
666 Bigint *b1, *p5, *p51;
667 int i;
668 static int p05[3] = { 5, 25, 125 };
669
670 if ((i = k & 3)) {
671 b = multadd(b, p05[i-1], 0);
672 if (b == NULL)
673 return NULL;
674 }
675
676 if (!(k >>= 2))
677 return b;
678 p5 = p5s;
679 if (!p5) {
680 /* first time */
681 p5 = i2b(625);
682 if (p5 == NULL) {
683 Bfree(b);
684 return NULL;
685 }
686 p5s = p5;
687 p5->next = 0;
688 }
689 for(;;) {
690 if (k & 1) {
691 b1 = mult(b, p5);
692 Bfree(b);
693 b = b1;
694 if (b == NULL)
695 return NULL;
696 }
697 if (!(k >>= 1))
698 break;
699 p51 = p5->next;
700 if (!p51) {
701 p51 = mult(p5,p5);
702 if (p51 == NULL) {
703 Bfree(b);
704 return NULL;
705 }
706 p51->next = 0;
707 p5->next = p51;
708 }
709 p5 = p51;
710 }
711 return b;
712}
713
714/* shift a Bigint b left by k bits. Return a pointer to the shifted result,
715 or NULL on failure. If the returned pointer is distinct from b then the
716 original b will have been Bfree'd. Ignores the sign of b. */
717
718static Bigint *
719lshift(Bigint *b, int k)
720{
721 int i, k1, n, n1;
722 Bigint *b1;
723 ULong *x, *x1, *xe, z;
724
725 n = k >> 5;
726 k1 = b->k;
727 n1 = n + b->wds + 1;
728 for(i = b->maxwds; n1 > i; i <<= 1)
729 k1++;
730 b1 = Balloc(k1);
731 if (b1 == NULL) {
732 Bfree(b);
733 return NULL;
734 }
735 x1 = b1->x;
736 for(i = 0; i < n; i++)
737 *x1++ = 0;
738 x = b->x;
739 xe = x + b->wds;
740 if (k &= 0x1f) {
741 k1 = 32 - k;
742 z = 0;
743 do {
744 *x1++ = *x << k | z;
745 z = *x++ >> k1;
746 }
747 while(x < xe);
748 if ((*x1 = z))
749 ++n1;
750 }
751 else do
752 *x1++ = *x++;
753 while(x < xe);
754 b1->wds = n1 - 1;
755 Bfree(b);
756 return b1;
757}
758
759/* Do a three-way compare of a and b, returning -1 if a < b, 0 if a == b and
760 1 if a > b. Ignores signs of a and b. */
761
762static int
763cmp(Bigint *a, Bigint *b)
764{
765 ULong *xa, *xa0, *xb, *xb0;
766 int i, j;
767
768 i = a->wds;
769 j = b->wds;
770#ifdef DEBUG
771 if (i > 1 && !a->x[i-1])
772 Bug("cmp called with a->x[a->wds-1] == 0");
773 if (j > 1 && !b->x[j-1])
774 Bug("cmp called with b->x[b->wds-1] == 0");
775#endif
776 if (i -= j)
777 return i;
778 xa0 = a->x;
779 xa = xa0 + j;
780 xb0 = b->x;
781 xb = xb0 + j;
782 for(;;) {
783 if (*--xa != *--xb)
784 return *xa < *xb ? -1 : 1;
785 if (xa <= xa0)
786 break;
787 }
788 return 0;
789}
790
791/* Take the difference of Bigints a and b, returning a new Bigint. Returns
792 NULL on failure. The signs of a and b are ignored, but the sign of the
793 result is set appropriately. */
794
795static Bigint *
796diff(Bigint *a, Bigint *b)
797{
798 Bigint *c;
799 int i, wa, wb;
800 ULong *xa, *xae, *xb, *xbe, *xc;
801#ifdef ULLong
802 ULLong borrow, y;
803#else
804 ULong borrow, y;
805 ULong z;
806#endif
807
808 i = cmp(a,b);
809 if (!i) {
810 c = Balloc(0);
811 if (c == NULL)
812 return NULL;
813 c->wds = 1;
814 c->x[0] = 0;
815 return c;
816 }
817 if (i < 0) {
818 c = a;
819 a = b;
820 b = c;
821 i = 1;
822 }
823 else
824 i = 0;
825 c = Balloc(a->k);
826 if (c == NULL)
827 return NULL;
828 c->sign = i;
829 wa = a->wds;
830 xa = a->x;
831 xae = xa + wa;
832 wb = b->wds;
833 xb = b->x;
834 xbe = xb + wb;
835 xc = c->x;
836 borrow = 0;
837#ifdef ULLong
838 do {
839 y = (ULLong)*xa++ - *xb++ - borrow;
840 borrow = y >> 32 & (ULong)1;
841 *xc++ = (ULong)(y & FFFFFFFF);
842 }
843 while(xb < xbe);
844 while(xa < xae) {
845 y = *xa++ - borrow;
846 borrow = y >> 32 & (ULong)1;
847 *xc++ = (ULong)(y & FFFFFFFF);
848 }
849#else
850 do {
851 y = (*xa & 0xffff) - (*xb & 0xffff) - borrow;
852 borrow = (y & 0x10000) >> 16;
853 z = (*xa++ >> 16) - (*xb++ >> 16) - borrow;
854 borrow = (z & 0x10000) >> 16;
855 Storeinc(xc, z, y);
856 }
857 while(xb < xbe);
858 while(xa < xae) {
859 y = (*xa & 0xffff) - borrow;
860 borrow = (y & 0x10000) >> 16;
861 z = (*xa++ >> 16) - borrow;
862 borrow = (z & 0x10000) >> 16;
863 Storeinc(xc, z, y);
864 }
865#endif
866 while(!*--xc)
867 wa--;
868 c->wds = wa;
869 return c;
870}
871
872/* Given a positive normal double x, return the difference between x and the next
873 double up. Doesn't give correct results for subnormals. */
874
875static double
876ulp(U *x)
877{
878 Long L;
879 U u;
880
881 L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
882 word0(&u) = L;
883 word1(&u) = 0;
884 return dval(&u);
885}
886
887/* Convert a Bigint to a double plus an exponent */
888
889static double
890b2d(Bigint *a, int *e)
891{
892 ULong *xa, *xa0, w, y, z;
893 int k;
894 U d;
895
896 xa0 = a->x;
897 xa = xa0 + a->wds;
898 y = *--xa;
899#ifdef DEBUG
900 if (!y) Bug("zero y in b2d");
901#endif
902 k = hi0bits(y);
903 *e = 32 - k;
904 if (k < Ebits) {
905 word0(&d) = Exp_1 | y >> (Ebits - k);
906 w = xa > xa0 ? *--xa : 0;
907 word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
908 goto ret_d;
909 }
910 z = xa > xa0 ? *--xa : 0;
911 if (k -= Ebits) {
912 word0(&d) = Exp_1 | y << k | z >> (32 - k);
913 y = xa > xa0 ? *--xa : 0;
914 word1(&d) = z << k | y >> (32 - k);
915 }
916 else {
917 word0(&d) = Exp_1 | y;
918 word1(&d) = z;
919 }
920 ret_d:
921 return dval(&d);
922}
923
924/* Convert a double to a Bigint plus an exponent. Return NULL on failure.
925
926 Given a finite nonzero double d, return an odd Bigint b and exponent *e
927 such that fabs(d) = b * 2**e. On return, *bbits gives the number of
Mark Dickinson2bcd1772010-01-04 21:32:02 +0000928 significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
Mark Dickinsonbb282852009-10-24 12:13:30 +0000929
930 If d is zero, then b == 0, *e == -1010, *bbits = 0.
931 */
932
933
934static Bigint *
935d2b(U *d, int *e, int *bits)
936{
937 Bigint *b;
938 int de, k;
939 ULong *x, y, z;
940 int i;
941
942 b = Balloc(1);
943 if (b == NULL)
944 return NULL;
945 x = b->x;
946
947 z = word0(d) & Frac_mask;
948 word0(d) &= 0x7fffffff; /* clear sign bit, which we ignore */
949 if ((de = (int)(word0(d) >> Exp_shift)))
950 z |= Exp_msk1;
951 if ((y = word1(d))) {
952 if ((k = lo0bits(&y))) {
953 x[0] = y | z << (32 - k);
954 z >>= k;
955 }
956 else
957 x[0] = y;
958 i =
959 b->wds = (x[1] = z) ? 2 : 1;
960 }
961 else {
962 k = lo0bits(&z);
963 x[0] = z;
964 i =
965 b->wds = 1;
966 k += 32;
967 }
968 if (de) {
969 *e = de - Bias - (P-1) + k;
970 *bits = P - k;
971 }
972 else {
973 *e = de - Bias - (P-1) + 1 + k;
974 *bits = 32*i - hi0bits(x[i-1]);
975 }
976 return b;
977}
978
979/* Compute the ratio of two Bigints, as a double. The result may have an
980 error of up to 2.5 ulps. */
981
982static double
983ratio(Bigint *a, Bigint *b)
984{
985 U da, db;
986 int k, ka, kb;
987
988 dval(&da) = b2d(a, &ka);
989 dval(&db) = b2d(b, &kb);
990 k = ka - kb + 32*(a->wds - b->wds);
991 if (k > 0)
992 word0(&da) += k*Exp_msk1;
993 else {
994 k = -k;
995 word0(&db) += k*Exp_msk1;
996 }
997 return dval(&da) / dval(&db);
998}
999
1000static const double
1001tens[] = {
1002 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
1003 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
1004 1e20, 1e21, 1e22
1005};
1006
1007static const double
1008bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
1009static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
1010 9007199254740992.*9007199254740992.e-256
1011 /* = 2^106 * 1e-256 */
1012};
1013/* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
1014/* flag unnecessarily. It leads to a song and dance at the end of strtod. */
1015#define Scale_Bit 0x10
1016#define n_bigtens 5
1017
1018#define ULbits 32
1019#define kshift 5
1020#define kmask 31
1021
1022
1023static int
1024dshift(Bigint *b, int p2)
1025{
1026 int rv = hi0bits(b->x[b->wds-1]) - 4;
1027 if (p2 > 0)
1028 rv -= p2;
1029 return rv & kmask;
1030}
1031
1032/* special case of Bigint division. The quotient is always in the range 0 <=
1033 quotient < 10, and on entry the divisor S is normalized so that its top 4
1034 bits (28--31) are zero and bit 27 is set. */
1035
1036static int
1037quorem(Bigint *b, Bigint *S)
1038{
1039 int n;
1040 ULong *bx, *bxe, q, *sx, *sxe;
1041#ifdef ULLong
1042 ULLong borrow, carry, y, ys;
1043#else
1044 ULong borrow, carry, y, ys;
1045 ULong si, z, zs;
1046#endif
1047
1048 n = S->wds;
1049#ifdef DEBUG
1050 /*debug*/ if (b->wds > n)
1051 /*debug*/ Bug("oversize b in quorem");
1052#endif
1053 if (b->wds < n)
1054 return 0;
1055 sx = S->x;
1056 sxe = sx + --n;
1057 bx = b->x;
1058 bxe = bx + n;
1059 q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
1060#ifdef DEBUG
1061 /*debug*/ if (q > 9)
1062 /*debug*/ Bug("oversized quotient in quorem");
1063#endif
1064 if (q) {
1065 borrow = 0;
1066 carry = 0;
1067 do {
1068#ifdef ULLong
1069 ys = *sx++ * (ULLong)q + carry;
1070 carry = ys >> 32;
1071 y = *bx - (ys & FFFFFFFF) - borrow;
1072 borrow = y >> 32 & (ULong)1;
1073 *bx++ = (ULong)(y & FFFFFFFF);
1074#else
1075 si = *sx++;
1076 ys = (si & 0xffff) * q + carry;
1077 zs = (si >> 16) * q + (ys >> 16);
1078 carry = zs >> 16;
1079 y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
1080 borrow = (y & 0x10000) >> 16;
1081 z = (*bx >> 16) - (zs & 0xffff) - borrow;
1082 borrow = (z & 0x10000) >> 16;
1083 Storeinc(bx, z, y);
1084#endif
1085 }
1086 while(sx <= sxe);
1087 if (!*bxe) {
1088 bx = b->x;
1089 while(--bxe > bx && !*bxe)
1090 --n;
1091 b->wds = n;
1092 }
1093 }
1094 if (cmp(b, S) >= 0) {
1095 q++;
1096 borrow = 0;
1097 carry = 0;
1098 bx = b->x;
1099 sx = S->x;
1100 do {
1101#ifdef ULLong
1102 ys = *sx++ + carry;
1103 carry = ys >> 32;
1104 y = *bx - (ys & FFFFFFFF) - borrow;
1105 borrow = y >> 32 & (ULong)1;
1106 *bx++ = (ULong)(y & FFFFFFFF);
1107#else
1108 si = *sx++;
1109 ys = (si & 0xffff) + carry;
1110 zs = (si >> 16) + (ys >> 16);
1111 carry = zs >> 16;
1112 y = (*bx & 0xffff) - (ys & 0xffff) - borrow;
1113 borrow = (y & 0x10000) >> 16;
1114 z = (*bx >> 16) - (zs & 0xffff) - borrow;
1115 borrow = (z & 0x10000) >> 16;
1116 Storeinc(bx, z, y);
1117#endif
1118 }
1119 while(sx <= sxe);
1120 bx = b->x;
1121 bxe = bx + n;
1122 if (!*bxe) {
1123 while(--bxe > bx && !*bxe)
1124 --n;
1125 b->wds = n;
1126 }
1127 }
1128 return q;
1129}
1130
Mark Dickinson5818e012010-01-13 19:02:37 +00001131/* sulp(x) is a version of ulp(x) that takes bc.scale into account.
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001132
Mark Dickinson5818e012010-01-13 19:02:37 +00001133 Assuming that x is finite and nonnegative (positive zero is fine
1134 here) and x / 2^bc.scale is exactly representable as a double,
1135 sulp(x) is equivalent to 2^bc.scale * ulp(x / 2^bc.scale). */
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001136
1137static double
1138sulp(U *x, BCinfo *bc)
1139{
1140 U u;
1141
Mark Dickinson02139d72010-01-13 22:15:53 +00001142 if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001143 /* rv/2^bc->scale is subnormal */
1144 word0(&u) = (P+2)*Exp_msk1;
1145 word1(&u) = 0;
1146 return u.d;
1147 }
Mark Dickinson5818e012010-01-13 19:02:37 +00001148 else {
1149 assert(word0(x) || word1(x)); /* x != 0.0 */
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001150 return ulp(x);
Mark Dickinson5818e012010-01-13 19:02:37 +00001151 }
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001152}
Mark Dickinsonbb282852009-10-24 12:13:30 +00001153
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001154/* The bigcomp function handles some hard cases for strtod, for inputs
1155 with more than STRTOD_DIGLIM digits. It's called once an initial
1156 estimate for the double corresponding to the input string has
1157 already been obtained by the code in _Py_dg_strtod.
1158
1159 The bigcomp function is only called after _Py_dg_strtod has found a
1160 double value rv such that either rv or rv + 1ulp represents the
1161 correctly rounded value corresponding to the original string. It
1162 determines which of these two values is the correct one by
1163 computing the decimal digits of rv + 0.5ulp and comparing them with
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001164 the corresponding digits of s0.
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001165
1166 In the following, write dv for the absolute value of the number represented
1167 by the input string.
1168
1169 Inputs:
1170
1171 s0 points to the first significant digit of the input string.
1172
1173 rv is a (possibly scaled) estimate for the closest double value to the
1174 value represented by the original input to _Py_dg_strtod. If
1175 bc->scale is nonzero, then rv/2^(bc->scale) is the approximation to
1176 the input value.
1177
1178 bc is a struct containing information gathered during the parsing and
1179 estimation steps of _Py_dg_strtod. Description of fields follows:
1180
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001181 bc->dsign is 1 if rv < decimal value, 0 if rv >= decimal value. In
1182 normal use, it should almost always be 1 when bigcomp is entered.
1183
1184 bc->e0 gives the exponent of the input value, such that dv = (integer
1185 given by the bd->nd digits of s0) * 10**e0
1186
Mark Dickinsond2a99402010-01-13 22:20:10 +00001187 bc->nd gives the total number of significant digits of s0. It will
1188 be at least 1.
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001189
1190 bc->nd0 gives the number of significant digits of s0 before the
1191 decimal separator. If there's no decimal separator, bc->nd0 ==
1192 bc->nd.
1193
1194 bc->scale is the value used to scale rv to avoid doing arithmetic with
1195 subnormal values. It's either 0 or 2*P (=106).
1196
1197 Outputs:
1198
1199 On successful exit, rv/2^(bc->scale) is the closest double to dv.
1200
1201 Returns 0 on success, -1 on failure (e.g., due to a failed malloc call). */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001202
1203static int
1204bigcomp(U *rv, const char *s0, BCinfo *bc)
1205{
1206 Bigint *b, *d;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001207 int b2, bbits, d2, dd, i, nd, nd0, p2, p5;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001208
Mark Dickinsond2a99402010-01-13 22:20:10 +00001209 dd = 0; /* silence compiler warning about possibly unused variable */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001210 nd = bc->nd;
1211 nd0 = bc->nd0;
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001212 p5 = nd + bc->e0;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001213 if (rv->d == 0.) {
1214 /* special case because d2b doesn't handle 0.0 */
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001215 b = i2b(0);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001216 if (b == NULL)
1217 return -1;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001218 p2 = Emin - P + 1; /* = -1074 for IEEE 754 binary64 */
1219 bbits = 0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001220 }
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001221 else {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001222 b = d2b(rv, &p2, &bbits);
1223 if (b == NULL)
1224 return -1;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001225 p2 -= bc->scale;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001226 }
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001227 /* now rv/2^(bc->scale) = b * 2**p2, and b has bbits significant bits */
1228
1229 /* Replace (b, p2) by (b << i, p2 - i), with i the largest integer such
1230 that b << i has at most P significant bits and p2 - i >= Emin - P +
1231 1. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001232 i = P - bbits;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001233 if (i > p2 - (Emin - P + 1))
1234 i = p2 - (Emin - P + 1);
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001235 /* increment i so that we shift b by an extra bit; then or-ing a 1 into
1236 the lsb of b gives us rv/2^(bc->scale) + 0.5ulp. */
1237 b = lshift(b, ++i);
1238 if (b == NULL)
1239 return -1;
1240 b->x[0] |= 1;
1241
Mark Dickinsonbb282852009-10-24 12:13:30 +00001242 p2 -= p5 + i;
1243 d = i2b(1);
1244 if (d == NULL) {
1245 Bfree(b);
1246 return -1;
1247 }
1248 /* Arrange for convenient computation of quotients:
1249 * shift left if necessary so divisor has 4 leading 0 bits.
1250 */
1251 if (p5 > 0) {
1252 d = pow5mult(d, p5);
1253 if (d == NULL) {
1254 Bfree(b);
1255 return -1;
1256 }
1257 }
1258 else if (p5 < 0) {
1259 b = pow5mult(b, -p5);
1260 if (b == NULL) {
1261 Bfree(d);
1262 return -1;
1263 }
1264 }
1265 if (p2 > 0) {
1266 b2 = p2;
1267 d2 = 0;
1268 }
1269 else {
1270 b2 = 0;
1271 d2 = -p2;
1272 }
1273 i = dshift(d, d2);
1274 if ((b2 += i) > 0) {
1275 b = lshift(b, b2);
1276 if (b == NULL) {
1277 Bfree(d);
1278 return -1;
1279 }
1280 }
1281 if ((d2 += i) > 0) {
1282 d = lshift(d, d2);
1283 if (d == NULL) {
1284 Bfree(b);
1285 return -1;
1286 }
1287 }
1288
Mark Dickinsond2a99402010-01-13 22:20:10 +00001289 /* if b >= d, round down */
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001290 if (cmp(b, d) >= 0) {
1291 dd = -1;
1292 goto ret;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001293 }
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001294
Mark Dickinsonbb282852009-10-24 12:13:30 +00001295 /* Compare b/d with s0 */
Mark Dickinsond2a99402010-01-13 22:20:10 +00001296 for(i = 0; i < nd0; i++) {
1297 b = multadd(b, 10, 0);
1298 if (b == NULL) {
1299 Bfree(d);
1300 return -1;
1301 }
1302 dd = *s0++ - '0' - quorem(b, d);
1303 if (dd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001304 goto ret;
1305 if (!b->x[0] && b->wds == 1) {
1306 if (i < nd)
1307 dd = 1;
1308 goto ret;
1309 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00001310 }
Mark Dickinsond2a99402010-01-13 22:20:10 +00001311 s0++;
1312 for(; i < nd; i++) {
1313 b = multadd(b, 10, 0);
1314 if (b == NULL) {
1315 Bfree(d);
1316 return -1;
1317 }
1318 dd = *s0++ - '0' - quorem(b, d);
1319 if (dd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001320 goto ret;
1321 if (!b->x[0] && b->wds == 1) {
1322 if (i < nd)
1323 dd = 1;
1324 goto ret;
1325 }
Mark Dickinsonbb282852009-10-24 12:13:30 +00001326 }
1327 if (b->x[0] || b->wds > 1)
1328 dd = -1;
1329 ret:
1330 Bfree(b);
1331 Bfree(d);
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001332 if (dd > 0)
1333 dval(rv) += sulp(rv, bc);
1334 else if (dd == 0) {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001335 /* Exact half-way case: apply round-even rule. */
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001336 if (word1(rv) & 1)
1337 dval(rv) += sulp(rv, bc);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001338 }
1339
1340 return 0;
1341}
1342
1343double
1344_Py_dg_strtod(const char *s00, char **se)
1345{
Mark Dickinsond2a99402010-01-13 22:20:10 +00001346 int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, dp0, dp1, dplen, e, e1, error;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001347 int esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
1348 const char *s, *s0, *s1;
1349 double aadj, aadj1;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001350 U aadj2, adj, rv, rv0;
Mark Dickinson0ca74522010-01-11 17:15:13 +00001351 ULong y, z, L;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001352 BCinfo bc;
1353 Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1354
Mark Dickinsond2a99402010-01-13 22:20:10 +00001355 sign = nz0 = nz = dplen = 0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001356 dval(&rv) = 0.;
1357 for(s = s00;;s++) switch(*s) {
1358 case '-':
1359 sign = 1;
1360 /* no break */
1361 case '+':
1362 if (*++s)
1363 goto break2;
1364 /* no break */
1365 case 0:
1366 goto ret0;
1367 /* modify original dtoa.c so that it doesn't accept leading whitespace
1368 case '\t':
1369 case '\n':
1370 case '\v':
1371 case '\f':
1372 case '\r':
1373 case ' ':
1374 continue;
1375 */
1376 default:
1377 goto break2;
1378 }
1379 break2:
1380 if (*s == '0') {
1381 nz0 = 1;
1382 while(*++s == '0') ;
1383 if (!*s)
1384 goto ret;
1385 }
1386 s0 = s;
1387 y = z = 0;
1388 for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
1389 if (nd < 9)
1390 y = 10*y + c - '0';
1391 else if (nd < 16)
1392 z = 10*z + c - '0';
1393 nd0 = nd;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001394 dp0 = dp1 = s - s0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001395 if (c == '.') {
1396 c = *++s;
Mark Dickinsond2a99402010-01-13 22:20:10 +00001397 dp1 = s - s0;
1398 dplen = 1;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001399 if (!nd) {
1400 for(; c == '0'; c = *++s)
1401 nz++;
1402 if (c > '0' && c <= '9') {
1403 s0 = s;
1404 nf += nz;
1405 nz = 0;
1406 goto have_dig;
1407 }
1408 goto dig_done;
1409 }
1410 for(; c >= '0' && c <= '9'; c = *++s) {
1411 have_dig:
1412 nz++;
1413 if (c -= '0') {
1414 nf += nz;
1415 for(i = 1; i < nz; i++)
1416 if (nd++ < 9)
1417 y *= 10;
1418 else if (nd <= DBL_DIG + 1)
1419 z *= 10;
1420 if (nd++ < 9)
1421 y = 10*y + c;
1422 else if (nd <= DBL_DIG + 1)
1423 z = 10*z + c;
1424 nz = 0;
1425 }
1426 }
1427 }
1428 dig_done:
1429 e = 0;
1430 if (c == 'e' || c == 'E') {
1431 if (!nd && !nz && !nz0) {
1432 goto ret0;
1433 }
1434 s00 = s;
1435 esign = 0;
1436 switch(c = *++s) {
1437 case '-':
1438 esign = 1;
1439 case '+':
1440 c = *++s;
1441 }
1442 if (c >= '0' && c <= '9') {
1443 while(c == '0')
1444 c = *++s;
1445 if (c > '0' && c <= '9') {
1446 L = c - '0';
1447 s1 = s;
1448 while((c = *++s) >= '0' && c <= '9')
1449 L = 10*L + c - '0';
Mark Dickinson0ca74522010-01-11 17:15:13 +00001450 if (s - s1 > 8 || L > MAX_ABS_EXP)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001451 /* Avoid confusion from exponents
1452 * so large that e might overflow.
1453 */
Mark Dickinson0ca74522010-01-11 17:15:13 +00001454 e = (int)MAX_ABS_EXP; /* safe for 16 bit ints */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001455 else
1456 e = (int)L;
1457 if (esign)
1458 e = -e;
1459 }
1460 else
1461 e = 0;
1462 }
1463 else
1464 s = s00;
1465 }
1466 if (!nd) {
1467 if (!nz && !nz0) {
1468 ret0:
1469 s = s00;
1470 sign = 0;
1471 }
1472 goto ret;
1473 }
1474 bc.e0 = e1 = e -= nf;
1475
1476 /* Now we have nd0 digits, starting at s0, followed by a
1477 * decimal point, followed by nd-nd0 digits. The number we're
1478 * after is the integer represented by those digits times
1479 * 10**e */
1480
1481 if (!nd0)
1482 nd0 = nd;
1483 k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1484 dval(&rv) = y;
1485 if (k > 9) {
1486 dval(&rv) = tens[k - 9] * dval(&rv) + z;
1487 }
1488 bd0 = 0;
1489 if (nd <= DBL_DIG
1490 && Flt_Rounds == 1
1491 ) {
1492 if (!e)
1493 goto ret;
1494 if (e > 0) {
1495 if (e <= Ten_pmax) {
1496 dval(&rv) *= tens[e];
1497 goto ret;
1498 }
1499 i = DBL_DIG - nd;
1500 if (e <= Ten_pmax + i) {
1501 /* A fancier test would sometimes let us do
1502 * this for larger i values.
1503 */
1504 e -= i;
1505 dval(&rv) *= tens[i];
1506 dval(&rv) *= tens[e];
1507 goto ret;
1508 }
1509 }
1510 else if (e >= -Ten_pmax) {
1511 dval(&rv) /= tens[-e];
1512 goto ret;
1513 }
1514 }
1515 e1 += nd - k;
1516
1517 bc.scale = 0;
1518
1519 /* Get starting approximation = rv * 10**e1 */
1520
1521 if (e1 > 0) {
1522 if ((i = e1 & 15))
1523 dval(&rv) *= tens[i];
1524 if (e1 &= ~15) {
1525 if (e1 > DBL_MAX_10_EXP) {
1526 ovfl:
1527 errno = ERANGE;
1528 /* Can't trust HUGE_VAL */
1529 word0(&rv) = Exp_mask;
1530 word1(&rv) = 0;
1531 goto ret;
1532 }
1533 e1 >>= 4;
1534 for(j = 0; e1 > 1; j++, e1 >>= 1)
1535 if (e1 & 1)
1536 dval(&rv) *= bigtens[j];
1537 /* The last multiplication could overflow. */
1538 word0(&rv) -= P*Exp_msk1;
1539 dval(&rv) *= bigtens[j];
1540 if ((z = word0(&rv) & Exp_mask)
1541 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1542 goto ovfl;
1543 if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1544 /* set to largest number */
1545 /* (Can't trust DBL_MAX) */
1546 word0(&rv) = Big0;
1547 word1(&rv) = Big1;
1548 }
1549 else
1550 word0(&rv) += P*Exp_msk1;
1551 }
1552 }
1553 else if (e1 < 0) {
1554 e1 = -e1;
1555 if ((i = e1 & 15))
1556 dval(&rv) /= tens[i];
1557 if (e1 >>= 4) {
1558 if (e1 >= 1 << n_bigtens)
1559 goto undfl;
1560 if (e1 & Scale_Bit)
1561 bc.scale = 2*P;
1562 for(j = 0; e1 > 0; j++, e1 >>= 1)
1563 if (e1 & 1)
1564 dval(&rv) *= tinytens[j];
1565 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1566 >> Exp_shift)) > 0) {
1567 /* scaled rv is denormal; clear j low bits */
1568 if (j >= 32) {
1569 word1(&rv) = 0;
1570 if (j >= 53)
1571 word0(&rv) = (P+2)*Exp_msk1;
1572 else
1573 word0(&rv) &= 0xffffffff << (j-32);
1574 }
1575 else
1576 word1(&rv) &= 0xffffffff << j;
1577 }
1578 if (!dval(&rv)) {
1579 undfl:
1580 dval(&rv) = 0.;
1581 errno = ERANGE;
1582 goto ret;
1583 }
1584 }
1585 }
1586
1587 /* Now the hard part -- adjusting rv to the correct value.*/
1588
1589 /* Put digits into bd: true value = bd * 10^e */
1590
1591 bc.nd = nd;
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001592 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001593 /* to silence an erroneous warning about bc.nd0 */
1594 /* possibly not being initialized. */
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001595 if (nd > STRTOD_DIGLIM) {
1596 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001597 /* minimum number of decimal digits to distinguish double values */
1598 /* in IEEE arithmetic. */
1599 i = j = 18;
1600 if (i > nd0)
Mark Dickinsond2a99402010-01-13 22:20:10 +00001601 j += dplen;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001602 for(;;) {
Mark Dickinsond2a99402010-01-13 22:20:10 +00001603 if (--j <= dp1 && j >= dp0)
1604 j = dp0 - 1;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001605 if (s0[j] != '0')
1606 break;
1607 --i;
1608 }
1609 e += nd - i;
1610 nd = i;
1611 if (nd0 > nd)
1612 nd0 = nd;
1613 if (nd < 9) { /* must recompute y */
1614 y = 0;
1615 for(i = 0; i < nd0; ++i)
1616 y = 10*y + s0[i] - '0';
Mark Dickinsond2a99402010-01-13 22:20:10 +00001617 for(j = dp1; i < nd; ++i)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001618 y = 10*y + s0[j++] - '0';
1619 }
1620 }
Mark Dickinsond2a99402010-01-13 22:20:10 +00001621 bd0 = s2b(s0, nd0, nd, y);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001622 if (bd0 == NULL)
1623 goto failed_malloc;
1624
1625 for(;;) {
1626 bd = Balloc(bd0->k);
1627 if (bd == NULL) {
1628 Bfree(bd0);
1629 goto failed_malloc;
1630 }
1631 Bcopy(bd, bd0);
1632 bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
1633 if (bb == NULL) {
1634 Bfree(bd);
1635 Bfree(bd0);
1636 goto failed_malloc;
1637 }
1638 bs = i2b(1);
1639 if (bs == NULL) {
1640 Bfree(bb);
1641 Bfree(bd);
1642 Bfree(bd0);
1643 goto failed_malloc;
1644 }
1645
1646 if (e >= 0) {
1647 bb2 = bb5 = 0;
1648 bd2 = bd5 = e;
1649 }
1650 else {
1651 bb2 = bb5 = -e;
1652 bd2 = bd5 = 0;
1653 }
1654 if (bbe >= 0)
1655 bb2 += bbe;
1656 else
1657 bd2 -= bbe;
1658 bs2 = bb2;
1659 j = bbe - bc.scale;
1660 i = j + bbbits - 1; /* logb(rv) */
1661 if (i < Emin) /* denormal */
1662 j += P - Emin;
1663 else
1664 j = P + 1 - bbbits;
1665 bb2 += j;
1666 bd2 += j;
1667 bd2 += bc.scale;
1668 i = bb2 < bd2 ? bb2 : bd2;
1669 if (i > bs2)
1670 i = bs2;
1671 if (i > 0) {
1672 bb2 -= i;
1673 bd2 -= i;
1674 bs2 -= i;
1675 }
1676 if (bb5 > 0) {
1677 bs = pow5mult(bs, bb5);
1678 if (bs == NULL) {
1679 Bfree(bb);
1680 Bfree(bd);
1681 Bfree(bd0);
1682 goto failed_malloc;
1683 }
1684 bb1 = mult(bs, bb);
1685 Bfree(bb);
1686 bb = bb1;
1687 if (bb == NULL) {
1688 Bfree(bs);
1689 Bfree(bd);
1690 Bfree(bd0);
1691 goto failed_malloc;
1692 }
1693 }
1694 if (bb2 > 0) {
1695 bb = lshift(bb, bb2);
1696 if (bb == NULL) {
1697 Bfree(bs);
1698 Bfree(bd);
1699 Bfree(bd0);
1700 goto failed_malloc;
1701 }
1702 }
1703 if (bd5 > 0) {
1704 bd = pow5mult(bd, bd5);
1705 if (bd == NULL) {
1706 Bfree(bb);
1707 Bfree(bs);
1708 Bfree(bd0);
1709 goto failed_malloc;
1710 }
1711 }
1712 if (bd2 > 0) {
1713 bd = lshift(bd, bd2);
1714 if (bd == NULL) {
1715 Bfree(bb);
1716 Bfree(bs);
1717 Bfree(bd0);
1718 goto failed_malloc;
1719 }
1720 }
1721 if (bs2 > 0) {
1722 bs = lshift(bs, bs2);
1723 if (bs == NULL) {
1724 Bfree(bb);
1725 Bfree(bd);
1726 Bfree(bd0);
1727 goto failed_malloc;
1728 }
1729 }
1730 delta = diff(bb, bd);
1731 if (delta == NULL) {
1732 Bfree(bb);
1733 Bfree(bs);
1734 Bfree(bd);
1735 Bfree(bd0);
1736 goto failed_malloc;
1737 }
1738 bc.dsign = delta->sign;
1739 delta->sign = 0;
1740 i = cmp(delta, bs);
1741 if (bc.nd > nd && i <= 0) {
1742 if (bc.dsign)
1743 break; /* Must use bigcomp(). */
1744 {
1745 bc.nd = nd;
1746 i = -1; /* Discarded digits make delta smaller. */
1747 }
1748 }
1749
1750 if (i < 0) {
1751 /* Error is less than half an ulp -- check for
1752 * special case of mantissa a power of two.
1753 */
1754 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask
1755 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1756 ) {
1757 break;
1758 }
1759 if (!delta->x[0] && delta->wds <= 1) {
1760 /* exact result */
1761 break;
1762 }
1763 delta = lshift(delta,Log2P);
1764 if (delta == NULL) {
1765 Bfree(bb);
1766 Bfree(bs);
1767 Bfree(bd);
1768 Bfree(bd0);
1769 goto failed_malloc;
1770 }
1771 if (cmp(delta, bs) > 0)
1772 goto drop_down;
1773 break;
1774 }
1775 if (i == 0) {
1776 /* exactly half-way between */
1777 if (bc.dsign) {
1778 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1779 && word1(&rv) == (
1780 (bc.scale &&
1781 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1782 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
1783 0xffffffff)) {
1784 /*boundary case -- increment exponent*/
1785 word0(&rv) = (word0(&rv) & Exp_mask)
1786 + Exp_msk1
1787 ;
1788 word1(&rv) = 0;
1789 bc.dsign = 0;
1790 break;
1791 }
1792 }
1793 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
1794 drop_down:
1795 /* boundary case -- decrement exponent */
1796 if (bc.scale) {
1797 L = word0(&rv) & Exp_mask;
1798 if (L <= (2*P+1)*Exp_msk1) {
1799 if (L > (P+2)*Exp_msk1)
1800 /* round even ==> */
1801 /* accept rv */
1802 break;
1803 /* rv = smallest denormal */
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001804 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001805 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001806 goto undfl;
1807 }
1808 }
1809 L = (word0(&rv) & Exp_mask) - Exp_msk1;
1810 word0(&rv) = L | Bndry_mask1;
1811 word1(&rv) = 0xffffffff;
1812 break;
1813 }
1814 if (!(word1(&rv) & LSB))
1815 break;
1816 if (bc.dsign)
1817 dval(&rv) += ulp(&rv);
1818 else {
1819 dval(&rv) -= ulp(&rv);
1820 if (!dval(&rv)) {
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001821 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001822 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001823 goto undfl;
1824 }
1825 }
1826 bc.dsign = 1 - bc.dsign;
1827 break;
1828 }
1829 if ((aadj = ratio(delta, bs)) <= 2.) {
1830 if (bc.dsign)
1831 aadj = aadj1 = 1.;
1832 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
1833 if (word1(&rv) == Tiny1 && !word0(&rv)) {
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001834 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001835 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001836 goto undfl;
1837 }
1838 aadj = 1.;
1839 aadj1 = -1.;
1840 }
1841 else {
1842 /* special case -- power of FLT_RADIX to be */
1843 /* rounded down... */
1844
1845 if (aadj < 2./FLT_RADIX)
1846 aadj = 1./FLT_RADIX;
1847 else
1848 aadj *= 0.5;
1849 aadj1 = -aadj;
1850 }
1851 }
1852 else {
1853 aadj *= 0.5;
1854 aadj1 = bc.dsign ? aadj : -aadj;
1855 if (Flt_Rounds == 0)
1856 aadj1 += 0.5;
1857 }
1858 y = word0(&rv) & Exp_mask;
1859
1860 /* Check for overflow */
1861
1862 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
1863 dval(&rv0) = dval(&rv);
1864 word0(&rv) -= P*Exp_msk1;
1865 adj.d = aadj1 * ulp(&rv);
1866 dval(&rv) += adj.d;
1867 if ((word0(&rv) & Exp_mask) >=
1868 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
1869 if (word0(&rv0) == Big0 && word1(&rv0) == Big1)
1870 goto ovfl;
1871 word0(&rv) = Big0;
1872 word1(&rv) = Big1;
1873 goto cont;
1874 }
1875 else
1876 word0(&rv) += P*Exp_msk1;
1877 }
1878 else {
1879 if (bc.scale && y <= 2*P*Exp_msk1) {
1880 if (aadj <= 0x7fffffff) {
1881 if ((z = (ULong)aadj) <= 0)
1882 z = 1;
1883 aadj = z;
1884 aadj1 = bc.dsign ? aadj : -aadj;
1885 }
1886 dval(&aadj2) = aadj1;
1887 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
1888 aadj1 = dval(&aadj2);
1889 }
1890 adj.d = aadj1 * ulp(&rv);
1891 dval(&rv) += adj.d;
1892 }
1893 z = word0(&rv) & Exp_mask;
1894 if (bc.nd == nd) {
1895 if (!bc.scale)
1896 if (y == z) {
1897 /* Can we stop now? */
1898 L = (Long)aadj;
1899 aadj -= L;
1900 /* The tolerances below are conservative. */
1901 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
1902 if (aadj < .4999999 || aadj > .5000001)
1903 break;
1904 }
1905 else if (aadj < .4999999/FLT_RADIX)
1906 break;
1907 }
1908 }
1909 cont:
1910 Bfree(bb);
1911 Bfree(bd);
1912 Bfree(bs);
1913 Bfree(delta);
1914 }
1915 Bfree(bb);
1916 Bfree(bd);
1917 Bfree(bs);
1918 Bfree(bd0);
1919 Bfree(delta);
1920 if (bc.nd > nd) {
1921 error = bigcomp(&rv, s0, &bc);
1922 if (error)
1923 goto failed_malloc;
1924 }
1925
1926 if (bc.scale) {
1927 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
1928 word1(&rv0) = 0;
1929 dval(&rv) *= dval(&rv0);
1930 /* try to avoid the bug of testing an 8087 register value */
1931 if (!(word0(&rv) & Exp_mask))
1932 errno = ERANGE;
1933 }
1934 ret:
1935 if (se)
1936 *se = (char *)s;
1937 return sign ? -dval(&rv) : dval(&rv);
1938
1939 failed_malloc:
1940 if (se)
1941 *se = (char *)s00;
1942 errno = ENOMEM;
1943 return -1.0;
1944}
1945
1946static char *
1947rv_alloc(int i)
1948{
1949 int j, k, *r;
1950
1951 j = sizeof(ULong);
1952 for(k = 0;
1953 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
1954 j <<= 1)
1955 k++;
1956 r = (int*)Balloc(k);
1957 if (r == NULL)
1958 return NULL;
1959 *r = k;
1960 return (char *)(r+1);
1961}
1962
1963static char *
1964nrv_alloc(char *s, char **rve, int n)
1965{
1966 char *rv, *t;
1967
1968 rv = rv_alloc(n);
1969 if (rv == NULL)
1970 return NULL;
1971 t = rv;
1972 while((*t = *s++)) t++;
1973 if (rve)
1974 *rve = t;
1975 return rv;
1976}
1977
1978/* freedtoa(s) must be used to free values s returned by dtoa
1979 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
1980 * but for consistency with earlier versions of dtoa, it is optional
1981 * when MULTIPLE_THREADS is not defined.
1982 */
1983
1984void
1985_Py_dg_freedtoa(char *s)
1986{
1987 Bigint *b = (Bigint *)((int *)s - 1);
1988 b->maxwds = 1 << (b->k = *(int*)b);
1989 Bfree(b);
1990}
1991
1992/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
1993 *
1994 * Inspired by "How to Print Floating-Point Numbers Accurately" by
1995 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
1996 *
1997 * Modifications:
1998 * 1. Rather than iterating, we use a simple numeric overestimate
1999 * to determine k = floor(log10(d)). We scale relevant
2000 * quantities using O(log2(k)) rather than O(k) multiplications.
2001 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
2002 * try to generate digits strictly left to right. Instead, we
2003 * compute with fewer bits and propagate the carry if necessary
2004 * when rounding the final digit up. This is often faster.
2005 * 3. Under the assumption that input will be rounded nearest,
2006 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
2007 * That is, we allow equality in stopping tests when the
2008 * round-nearest rule will give the same floating-point value
2009 * as would satisfaction of the stopping test with strict
2010 * inequality.
2011 * 4. We remove common factors of powers of 2 from relevant
2012 * quantities.
2013 * 5. When converting floating-point integers less than 1e16,
2014 * we use floating-point arithmetic rather than resorting
2015 * to multiple-precision integers.
2016 * 6. When asked to produce fewer than 15 digits, we first try
2017 * to get by with floating-point arithmetic; we resort to
2018 * multiple-precision integer arithmetic only if we cannot
2019 * guarantee that the floating-point calculation has given
2020 * the correctly rounded result. For k requested digits and
2021 * "uniformly" distributed input, the probability is
2022 * something like 10^(k-15) that we must resort to the Long
2023 * calculation.
2024 */
2025
2026/* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2027 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2028 call to _Py_dg_freedtoa. */
2029
2030char *
2031_Py_dg_dtoa(double dd, int mode, int ndigits,
2032 int *decpt, int *sign, char **rve)
2033{
2034 /* Arguments ndigits, decpt, sign are similar to those
2035 of ecvt and fcvt; trailing zeros are suppressed from
2036 the returned string. If not null, *rve is set to point
2037 to the end of the return value. If d is +-Infinity or NaN,
2038 then *decpt is set to 9999.
2039
2040 mode:
2041 0 ==> shortest string that yields d when read in
2042 and rounded to nearest.
2043 1 ==> like 0, but with Steele & White stopping rule;
2044 e.g. with IEEE P754 arithmetic , mode 0 gives
2045 1e23 whereas mode 1 gives 9.999999999999999e22.
2046 2 ==> max(1,ndigits) significant digits. This gives a
2047 return value similar to that of ecvt, except
2048 that trailing zeros are suppressed.
2049 3 ==> through ndigits past the decimal point. This
2050 gives a return value similar to that from fcvt,
2051 except that trailing zeros are suppressed, and
2052 ndigits can be negative.
2053 4,5 ==> similar to 2 and 3, respectively, but (in
2054 round-nearest mode) with the tests of mode 0 to
2055 possibly return a shorter string that rounds to d.
2056 With IEEE arithmetic and compilation with
2057 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2058 as modes 2 and 3 when FLT_ROUNDS != 1.
2059 6-9 ==> Debugging modes similar to mode - 4: don't try
2060 fast floating-point estimate (if applicable).
2061
2062 Values of mode other than 0-9 are treated as mode 0.
2063
2064 Sufficient space is allocated to the return value
2065 to hold the suppressed trailing zeros.
2066 */
2067
2068 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2069 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2070 spec_case, try_quick;
2071 Long L;
2072 int denorm;
2073 ULong x;
2074 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2075 U d2, eps, u;
2076 double ds;
2077 char *s, *s0;
2078
2079 /* set pointers to NULL, to silence gcc compiler warnings and make
2080 cleanup easier on error */
2081 mlo = mhi = b = S = 0;
2082 s0 = 0;
2083
2084 u.d = dd;
2085 if (word0(&u) & Sign_bit) {
2086 /* set sign for everything, including 0's and NaNs */
2087 *sign = 1;
2088 word0(&u) &= ~Sign_bit; /* clear sign bit */
2089 }
2090 else
2091 *sign = 0;
2092
2093 /* quick return for Infinities, NaNs and zeros */
2094 if ((word0(&u) & Exp_mask) == Exp_mask)
2095 {
2096 /* Infinity or NaN */
2097 *decpt = 9999;
2098 if (!word1(&u) && !(word0(&u) & 0xfffff))
2099 return nrv_alloc("Infinity", rve, 8);
2100 return nrv_alloc("NaN", rve, 3);
2101 }
2102 if (!dval(&u)) {
2103 *decpt = 1;
2104 return nrv_alloc("0", rve, 1);
2105 }
2106
2107 /* compute k = floor(log10(d)). The computation may leave k
2108 one too large, but should never leave k too small. */
2109 b = d2b(&u, &be, &bbits);
2110 if (b == NULL)
2111 goto failed_malloc;
2112 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2113 dval(&d2) = dval(&u);
2114 word0(&d2) &= Frac_mask1;
2115 word0(&d2) |= Exp_11;
2116
2117 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2118 * log10(x) = log(x) / log(10)
2119 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2120 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2121 *
2122 * This suggests computing an approximation k to log10(d) by
2123 *
2124 * k = (i - Bias)*0.301029995663981
2125 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2126 *
2127 * We want k to be too large rather than too small.
2128 * The error in the first-order Taylor series approximation
2129 * is in our favor, so we just round up the constant enough
2130 * to compensate for any error in the multiplication of
2131 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2132 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2133 * adding 1e-13 to the constant term more than suffices.
2134 * Hence we adjust the constant term to 0.1760912590558.
2135 * (We could get a more accurate k by invoking log10,
2136 * but this is probably not worthwhile.)
2137 */
2138
2139 i -= Bias;
2140 denorm = 0;
2141 }
2142 else {
2143 /* d is denormalized */
2144
2145 i = bbits + be + (Bias + (P-1) - 1);
2146 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2147 : word1(&u) << (32 - i);
2148 dval(&d2) = x;
2149 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2150 i -= (Bias + (P-1) - 1) + 1;
2151 denorm = 1;
2152 }
2153 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2154 i*0.301029995663981;
2155 k = (int)ds;
2156 if (ds < 0. && ds != k)
2157 k--; /* want k = floor(ds) */
2158 k_check = 1;
2159 if (k >= 0 && k <= Ten_pmax) {
2160 if (dval(&u) < tens[k])
2161 k--;
2162 k_check = 0;
2163 }
2164 j = bbits - i - 1;
2165 if (j >= 0) {
2166 b2 = 0;
2167 s2 = j;
2168 }
2169 else {
2170 b2 = -j;
2171 s2 = 0;
2172 }
2173 if (k >= 0) {
2174 b5 = 0;
2175 s5 = k;
2176 s2 += k;
2177 }
2178 else {
2179 b2 -= k;
2180 b5 = -k;
2181 s5 = 0;
2182 }
2183 if (mode < 0 || mode > 9)
2184 mode = 0;
2185
2186 try_quick = 1;
2187
2188 if (mode > 5) {
2189 mode -= 4;
2190 try_quick = 0;
2191 }
2192 leftright = 1;
2193 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2194 /* silence erroneous "gcc -Wall" warning. */
2195 switch(mode) {
2196 case 0:
2197 case 1:
2198 i = 18;
2199 ndigits = 0;
2200 break;
2201 case 2:
2202 leftright = 0;
2203 /* no break */
2204 case 4:
2205 if (ndigits <= 0)
2206 ndigits = 1;
2207 ilim = ilim1 = i = ndigits;
2208 break;
2209 case 3:
2210 leftright = 0;
2211 /* no break */
2212 case 5:
2213 i = ndigits + k + 1;
2214 ilim = i;
2215 ilim1 = i - 1;
2216 if (i <= 0)
2217 i = 1;
2218 }
2219 s0 = rv_alloc(i);
2220 if (s0 == NULL)
2221 goto failed_malloc;
2222 s = s0;
2223
2224
2225 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2226
2227 /* Try to get by with floating-point arithmetic. */
2228
2229 i = 0;
2230 dval(&d2) = dval(&u);
2231 k0 = k;
2232 ilim0 = ilim;
2233 ieps = 2; /* conservative */
2234 if (k > 0) {
2235 ds = tens[k&0xf];
2236 j = k >> 4;
2237 if (j & Bletch) {
2238 /* prevent overflows */
2239 j &= Bletch - 1;
2240 dval(&u) /= bigtens[n_bigtens-1];
2241 ieps++;
2242 }
2243 for(; j; j >>= 1, i++)
2244 if (j & 1) {
2245 ieps++;
2246 ds *= bigtens[i];
2247 }
2248 dval(&u) /= ds;
2249 }
2250 else if ((j1 = -k)) {
2251 dval(&u) *= tens[j1 & 0xf];
2252 for(j = j1 >> 4; j; j >>= 1, i++)
2253 if (j & 1) {
2254 ieps++;
2255 dval(&u) *= bigtens[i];
2256 }
2257 }
2258 if (k_check && dval(&u) < 1. && ilim > 0) {
2259 if (ilim1 <= 0)
2260 goto fast_failed;
2261 ilim = ilim1;
2262 k--;
2263 dval(&u) *= 10.;
2264 ieps++;
2265 }
2266 dval(&eps) = ieps*dval(&u) + 7.;
2267 word0(&eps) -= (P-1)*Exp_msk1;
2268 if (ilim == 0) {
2269 S = mhi = 0;
2270 dval(&u) -= 5.;
2271 if (dval(&u) > dval(&eps))
2272 goto one_digit;
2273 if (dval(&u) < -dval(&eps))
2274 goto no_digits;
2275 goto fast_failed;
2276 }
2277 if (leftright) {
2278 /* Use Steele & White method of only
2279 * generating digits needed.
2280 */
2281 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2282 for(i = 0;;) {
2283 L = (Long)dval(&u);
2284 dval(&u) -= L;
2285 *s++ = '0' + (int)L;
2286 if (dval(&u) < dval(&eps))
2287 goto ret1;
2288 if (1. - dval(&u) < dval(&eps))
2289 goto bump_up;
2290 if (++i >= ilim)
2291 break;
2292 dval(&eps) *= 10.;
2293 dval(&u) *= 10.;
2294 }
2295 }
2296 else {
2297 /* Generate ilim digits, then fix them up. */
2298 dval(&eps) *= tens[ilim-1];
2299 for(i = 1;; i++, dval(&u) *= 10.) {
2300 L = (Long)(dval(&u));
2301 if (!(dval(&u) -= L))
2302 ilim = i;
2303 *s++ = '0' + (int)L;
2304 if (i == ilim) {
2305 if (dval(&u) > 0.5 + dval(&eps))
2306 goto bump_up;
2307 else if (dval(&u) < 0.5 - dval(&eps)) {
2308 while(*--s == '0');
2309 s++;
2310 goto ret1;
2311 }
2312 break;
2313 }
2314 }
2315 }
2316 fast_failed:
2317 s = s0;
2318 dval(&u) = dval(&d2);
2319 k = k0;
2320 ilim = ilim0;
2321 }
2322
2323 /* Do we have a "small" integer? */
2324
2325 if (be >= 0 && k <= Int_max) {
2326 /* Yes. */
2327 ds = tens[k];
2328 if (ndigits < 0 && ilim <= 0) {
2329 S = mhi = 0;
2330 if (ilim < 0 || dval(&u) <= 5*ds)
2331 goto no_digits;
2332 goto one_digit;
2333 }
2334 for(i = 1;; i++, dval(&u) *= 10.) {
2335 L = (Long)(dval(&u) / ds);
2336 dval(&u) -= L*ds;
2337 *s++ = '0' + (int)L;
2338 if (!dval(&u)) {
2339 break;
2340 }
2341 if (i == ilim) {
2342 dval(&u) += dval(&u);
2343 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2344 bump_up:
2345 while(*--s == '9')
2346 if (s == s0) {
2347 k++;
2348 *s = '0';
2349 break;
2350 }
2351 ++*s++;
2352 }
2353 break;
2354 }
2355 }
2356 goto ret1;
2357 }
2358
2359 m2 = b2;
2360 m5 = b5;
2361 if (leftright) {
2362 i =
2363 denorm ? be + (Bias + (P-1) - 1 + 1) :
2364 1 + P - bbits;
2365 b2 += i;
2366 s2 += i;
2367 mhi = i2b(1);
2368 if (mhi == NULL)
2369 goto failed_malloc;
2370 }
2371 if (m2 > 0 && s2 > 0) {
2372 i = m2 < s2 ? m2 : s2;
2373 b2 -= i;
2374 m2 -= i;
2375 s2 -= i;
2376 }
2377 if (b5 > 0) {
2378 if (leftright) {
2379 if (m5 > 0) {
2380 mhi = pow5mult(mhi, m5);
2381 if (mhi == NULL)
2382 goto failed_malloc;
2383 b1 = mult(mhi, b);
2384 Bfree(b);
2385 b = b1;
2386 if (b == NULL)
2387 goto failed_malloc;
2388 }
2389 if ((j = b5 - m5)) {
2390 b = pow5mult(b, j);
2391 if (b == NULL)
2392 goto failed_malloc;
2393 }
2394 }
2395 else {
2396 b = pow5mult(b, b5);
2397 if (b == NULL)
2398 goto failed_malloc;
2399 }
2400 }
2401 S = i2b(1);
2402 if (S == NULL)
2403 goto failed_malloc;
2404 if (s5 > 0) {
2405 S = pow5mult(S, s5);
2406 if (S == NULL)
2407 goto failed_malloc;
2408 }
2409
2410 /* Check for special case that d is a normalized power of 2. */
2411
2412 spec_case = 0;
2413 if ((mode < 2 || leftright)
2414 ) {
2415 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2416 && word0(&u) & (Exp_mask & ~Exp_msk1)
2417 ) {
2418 /* The special case */
2419 b2 += Log2P;
2420 s2 += Log2P;
2421 spec_case = 1;
2422 }
2423 }
2424
2425 /* Arrange for convenient computation of quotients:
2426 * shift left if necessary so divisor has 4 leading 0 bits.
2427 *
2428 * Perhaps we should just compute leading 28 bits of S once
2429 * and for all and pass them and a shift to quorem, so it
2430 * can do shifts and ors to compute the numerator for q.
2431 */
2432 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
2433 i = 32 - i;
2434#define iInc 28
2435 i = dshift(S, s2);
2436 b2 += i;
2437 m2 += i;
2438 s2 += i;
2439 if (b2 > 0) {
2440 b = lshift(b, b2);
2441 if (b == NULL)
2442 goto failed_malloc;
2443 }
2444 if (s2 > 0) {
2445 S = lshift(S, s2);
2446 if (S == NULL)
2447 goto failed_malloc;
2448 }
2449 if (k_check) {
2450 if (cmp(b,S) < 0) {
2451 k--;
2452 b = multadd(b, 10, 0); /* we botched the k estimate */
2453 if (b == NULL)
2454 goto failed_malloc;
2455 if (leftright) {
2456 mhi = multadd(mhi, 10, 0);
2457 if (mhi == NULL)
2458 goto failed_malloc;
2459 }
2460 ilim = ilim1;
2461 }
2462 }
2463 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2464 if (ilim < 0) {
2465 /* no digits, fcvt style */
2466 no_digits:
2467 k = -1 - ndigits;
2468 goto ret;
2469 }
2470 else {
2471 S = multadd(S, 5, 0);
2472 if (S == NULL)
2473 goto failed_malloc;
2474 if (cmp(b, S) <= 0)
2475 goto no_digits;
2476 }
2477 one_digit:
2478 *s++ = '1';
2479 k++;
2480 goto ret;
2481 }
2482 if (leftright) {
2483 if (m2 > 0) {
2484 mhi = lshift(mhi, m2);
2485 if (mhi == NULL)
2486 goto failed_malloc;
2487 }
2488
2489 /* Compute mlo -- check for special case
2490 * that d is a normalized power of 2.
2491 */
2492
2493 mlo = mhi;
2494 if (spec_case) {
2495 mhi = Balloc(mhi->k);
2496 if (mhi == NULL)
2497 goto failed_malloc;
2498 Bcopy(mhi, mlo);
2499 mhi = lshift(mhi, Log2P);
2500 if (mhi == NULL)
2501 goto failed_malloc;
2502 }
2503
2504 for(i = 1;;i++) {
2505 dig = quorem(b,S) + '0';
2506 /* Do we yet have the shortest decimal string
2507 * that will round to d?
2508 */
2509 j = cmp(b, mlo);
2510 delta = diff(S, mhi);
2511 if (delta == NULL)
2512 goto failed_malloc;
2513 j1 = delta->sign ? 1 : cmp(b, delta);
2514 Bfree(delta);
2515 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2516 ) {
2517 if (dig == '9')
2518 goto round_9_up;
2519 if (j > 0)
2520 dig++;
2521 *s++ = dig;
2522 goto ret;
2523 }
2524 if (j < 0 || (j == 0 && mode != 1
2525 && !(word1(&u) & 1)
2526 )) {
2527 if (!b->x[0] && b->wds <= 1) {
2528 goto accept_dig;
2529 }
2530 if (j1 > 0) {
2531 b = lshift(b, 1);
2532 if (b == NULL)
2533 goto failed_malloc;
2534 j1 = cmp(b, S);
2535 if ((j1 > 0 || (j1 == 0 && dig & 1))
2536 && dig++ == '9')
2537 goto round_9_up;
2538 }
2539 accept_dig:
2540 *s++ = dig;
2541 goto ret;
2542 }
2543 if (j1 > 0) {
2544 if (dig == '9') { /* possible if i == 1 */
2545 round_9_up:
2546 *s++ = '9';
2547 goto roundoff;
2548 }
2549 *s++ = dig + 1;
2550 goto ret;
2551 }
2552 *s++ = dig;
2553 if (i == ilim)
2554 break;
2555 b = multadd(b, 10, 0);
2556 if (b == NULL)
2557 goto failed_malloc;
2558 if (mlo == mhi) {
2559 mlo = mhi = multadd(mhi, 10, 0);
2560 if (mlo == NULL)
2561 goto failed_malloc;
2562 }
2563 else {
2564 mlo = multadd(mlo, 10, 0);
2565 if (mlo == NULL)
2566 goto failed_malloc;
2567 mhi = multadd(mhi, 10, 0);
2568 if (mhi == NULL)
2569 goto failed_malloc;
2570 }
2571 }
2572 }
2573 else
2574 for(i = 1;; i++) {
2575 *s++ = dig = quorem(b,S) + '0';
2576 if (!b->x[0] && b->wds <= 1) {
2577 goto ret;
2578 }
2579 if (i >= ilim)
2580 break;
2581 b = multadd(b, 10, 0);
2582 if (b == NULL)
2583 goto failed_malloc;
2584 }
2585
2586 /* Round off last digit */
2587
2588 b = lshift(b, 1);
2589 if (b == NULL)
2590 goto failed_malloc;
2591 j = cmp(b, S);
2592 if (j > 0 || (j == 0 && dig & 1)) {
2593 roundoff:
2594 while(*--s == '9')
2595 if (s == s0) {
2596 k++;
2597 *s++ = '1';
2598 goto ret;
2599 }
2600 ++*s++;
2601 }
2602 else {
2603 while(*--s == '0');
2604 s++;
2605 }
2606 ret:
2607 Bfree(S);
2608 if (mhi) {
2609 if (mlo && mlo != mhi)
2610 Bfree(mlo);
2611 Bfree(mhi);
2612 }
2613 ret1:
2614 Bfree(b);
2615 *s = 0;
2616 *decpt = k + 1;
2617 if (rve)
2618 *rve = s;
2619 return s0;
2620 failed_malloc:
2621 if (S)
2622 Bfree(S);
2623 if (mlo && mlo != mhi)
2624 Bfree(mlo);
2625 if (mhi)
2626 Bfree(mhi);
2627 if (b)
2628 Bfree(b);
2629 if (s0)
2630 _Py_dg_freedtoa(s0);
2631 return NULL;
2632}
2633#ifdef __cplusplus
2634}
2635#endif
2636
2637#endif /* PY_NO_SHORT_FLOAT_REPR */