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