blob: c8985bc980c55816cc66c0889446c8eb4dd0cb65 [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
Mark Dickinson02139d72010-01-13 22:15:53 +00001144 if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
Mark Dickinson5ff4f272010-01-12 22:55:51 +00001145 /* 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
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001166 the corresponding digits of s0.
Mark Dickinsonb26d56a2010-01-13 18:21:53 +00001167
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;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001221 int b2, bbits, d2, dd, dig, i, j, nd, nd0, p2, p5;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001222
Mark Dickinsonbb282852009-10-24 12:13:30 +00001223 nd = bc->nd;
1224 nd0 = bc->nd0;
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001225 p5 = nd + bc->e0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001226 if (rv->d == 0.) { /* special case: value near underflow-to-zero */
1227 /* threshold was rounded to zero */
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001228 b = i2b(0);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001229 if (b == NULL)
1230 return -1;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001231 p2 = Emin - P + 1; /* = -1074 for IEEE 754 binary64 */
1232 bbits = 0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001233 }
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001234 else {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001235 b = d2b(rv, &p2, &bbits);
1236 if (b == NULL)
1237 return -1;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001238 p2 -= bc->scale;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001239 }
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001240 /* now rv/2^(bc->scale) = b * 2**p2, and b has bbits significant bits */
1241
1242 /* Replace (b, p2) by (b << i, p2 - i), with i the largest integer such
1243 that b << i has at most P significant bits and p2 - i >= Emin - P +
1244 1. */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001245 i = P - bbits;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001246 j = p2 - (Emin - P + 1);
1247 if (i > j)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001248 i = j;
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001249 /* increment i so that we shift b by an extra bit; then or-ing a 1 into
1250 the lsb of b gives us rv/2^(bc->scale) + 0.5ulp. */
1251 b = lshift(b, ++i);
1252 if (b == NULL)
1253 return -1;
1254 b->x[0] |= 1;
1255
Mark Dickinsonbb282852009-10-24 12:13:30 +00001256 p2 -= p5 + i;
1257 d = i2b(1);
1258 if (d == NULL) {
1259 Bfree(b);
1260 return -1;
1261 }
1262 /* Arrange for convenient computation of quotients:
1263 * shift left if necessary so divisor has 4 leading 0 bits.
1264 */
1265 if (p5 > 0) {
1266 d = pow5mult(d, p5);
1267 if (d == NULL) {
1268 Bfree(b);
1269 return -1;
1270 }
1271 }
1272 else if (p5 < 0) {
1273 b = pow5mult(b, -p5);
1274 if (b == NULL) {
1275 Bfree(d);
1276 return -1;
1277 }
1278 }
1279 if (p2 > 0) {
1280 b2 = p2;
1281 d2 = 0;
1282 }
1283 else {
1284 b2 = 0;
1285 d2 = -p2;
1286 }
1287 i = dshift(d, d2);
1288 if ((b2 += i) > 0) {
1289 b = lshift(b, b2);
1290 if (b == NULL) {
1291 Bfree(d);
1292 return -1;
1293 }
1294 }
1295 if ((d2 += i) > 0) {
1296 d = lshift(d, d2);
1297 if (d == NULL) {
1298 Bfree(b);
1299 return -1;
1300 }
1301 }
1302
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001303 /* Now 10*b/d = exactly half-way between the two floating-point values
1304 on either side of the input string. If b >= d, round down. */
1305 if (cmp(b, d) >= 0) {
1306 dd = -1;
1307 goto ret;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001308 }
Mark Dickinson8efef5c2010-01-12 22:23:56 +00001309
1310 /* Compute first digit of 10*b/d. */
1311 b = multadd(b, 10, 0);
1312 if (b == NULL) {
1313 Bfree(d);
1314 return -1;
1315 }
1316 dig = quorem(b, d);
1317 assert(dig < 10);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001318
1319 /* Compare b/d with s0 */
1320
1321 assert(nd > 0);
1322 dd = 9999; /* silence gcc compiler warning */
1323 for(i = 0; i < nd0; ) {
1324 if ((dd = s0[i++] - '0' - dig))
1325 goto ret;
1326 if (!b->x[0] && b->wds == 1) {
1327 if (i < nd)
1328 dd = 1;
1329 goto ret;
1330 }
1331 b = multadd(b, 10, 0);
1332 if (b == NULL) {
1333 Bfree(d);
1334 return -1;
1335 }
1336 dig = quorem(b,d);
1337 }
1338 for(j = bc->dp1; i++ < nd;) {
1339 if ((dd = s0[j++] - '0' - dig))
1340 goto ret;
1341 if (!b->x[0] && b->wds == 1) {
1342 if (i < nd)
1343 dd = 1;
1344 goto ret;
1345 }
1346 b = multadd(b, 10, 0);
1347 if (b == NULL) {
1348 Bfree(d);
1349 return -1;
1350 }
1351 dig = quorem(b,d);
1352 }
1353 if (b->x[0] || b->wds > 1)
1354 dd = -1;
1355 ret:
1356 Bfree(b);
1357 Bfree(d);
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001358 if (dd > 0)
1359 dval(rv) += sulp(rv, bc);
1360 else if (dd == 0) {
Mark Dickinsonbb282852009-10-24 12:13:30 +00001361 /* Exact half-way case: apply round-even rule. */
Mark Dickinson6e0d3d62010-01-13 20:55:03 +00001362 if (word1(rv) & 1)
1363 dval(rv) += sulp(rv, bc);
Mark Dickinsonbb282852009-10-24 12:13:30 +00001364 }
1365
1366 return 0;
1367}
1368
1369double
1370_Py_dg_strtod(const char *s00, char **se)
1371{
1372 int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, e, e1, error;
1373 int esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
1374 const char *s, *s0, *s1;
1375 double aadj, aadj1;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001376 U aadj2, adj, rv, rv0;
Mark Dickinson0ca74522010-01-11 17:15:13 +00001377 ULong y, z, L;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001378 BCinfo bc;
1379 Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1380
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001381 sign = nz0 = nz = bc.dplen = 0;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001382 dval(&rv) = 0.;
1383 for(s = s00;;s++) switch(*s) {
1384 case '-':
1385 sign = 1;
1386 /* no break */
1387 case '+':
1388 if (*++s)
1389 goto break2;
1390 /* no break */
1391 case 0:
1392 goto ret0;
1393 /* modify original dtoa.c so that it doesn't accept leading whitespace
1394 case '\t':
1395 case '\n':
1396 case '\v':
1397 case '\f':
1398 case '\r':
1399 case ' ':
1400 continue;
1401 */
1402 default:
1403 goto break2;
1404 }
1405 break2:
1406 if (*s == '0') {
1407 nz0 = 1;
1408 while(*++s == '0') ;
1409 if (!*s)
1410 goto ret;
1411 }
1412 s0 = s;
1413 y = z = 0;
1414 for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
1415 if (nd < 9)
1416 y = 10*y + c - '0';
1417 else if (nd < 16)
1418 z = 10*z + c - '0';
1419 nd0 = nd;
1420 bc.dp0 = bc.dp1 = s - s0;
1421 if (c == '.') {
1422 c = *++s;
1423 bc.dp1 = s - s0;
1424 bc.dplen = bc.dp1 - bc.dp0;
1425 if (!nd) {
1426 for(; c == '0'; c = *++s)
1427 nz++;
1428 if (c > '0' && c <= '9') {
1429 s0 = s;
1430 nf += nz;
1431 nz = 0;
1432 goto have_dig;
1433 }
1434 goto dig_done;
1435 }
1436 for(; c >= '0' && c <= '9'; c = *++s) {
1437 have_dig:
1438 nz++;
1439 if (c -= '0') {
1440 nf += nz;
1441 for(i = 1; i < nz; i++)
1442 if (nd++ < 9)
1443 y *= 10;
1444 else if (nd <= DBL_DIG + 1)
1445 z *= 10;
1446 if (nd++ < 9)
1447 y = 10*y + c;
1448 else if (nd <= DBL_DIG + 1)
1449 z = 10*z + c;
1450 nz = 0;
1451 }
1452 }
1453 }
1454 dig_done:
1455 e = 0;
1456 if (c == 'e' || c == 'E') {
1457 if (!nd && !nz && !nz0) {
1458 goto ret0;
1459 }
1460 s00 = s;
1461 esign = 0;
1462 switch(c = *++s) {
1463 case '-':
1464 esign = 1;
1465 case '+':
1466 c = *++s;
1467 }
1468 if (c >= '0' && c <= '9') {
1469 while(c == '0')
1470 c = *++s;
1471 if (c > '0' && c <= '9') {
1472 L = c - '0';
1473 s1 = s;
1474 while((c = *++s) >= '0' && c <= '9')
1475 L = 10*L + c - '0';
Mark Dickinson0ca74522010-01-11 17:15:13 +00001476 if (s - s1 > 8 || L > MAX_ABS_EXP)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001477 /* Avoid confusion from exponents
1478 * so large that e might overflow.
1479 */
Mark Dickinson0ca74522010-01-11 17:15:13 +00001480 e = (int)MAX_ABS_EXP; /* safe for 16 bit ints */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001481 else
1482 e = (int)L;
1483 if (esign)
1484 e = -e;
1485 }
1486 else
1487 e = 0;
1488 }
1489 else
1490 s = s00;
1491 }
1492 if (!nd) {
1493 if (!nz && !nz0) {
1494 ret0:
1495 s = s00;
1496 sign = 0;
1497 }
1498 goto ret;
1499 }
1500 bc.e0 = e1 = e -= nf;
1501
1502 /* Now we have nd0 digits, starting at s0, followed by a
1503 * decimal point, followed by nd-nd0 digits. The number we're
1504 * after is the integer represented by those digits times
1505 * 10**e */
1506
1507 if (!nd0)
1508 nd0 = nd;
1509 k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1510 dval(&rv) = y;
1511 if (k > 9) {
1512 dval(&rv) = tens[k - 9] * dval(&rv) + z;
1513 }
1514 bd0 = 0;
1515 if (nd <= DBL_DIG
1516 && Flt_Rounds == 1
1517 ) {
1518 if (!e)
1519 goto ret;
1520 if (e > 0) {
1521 if (e <= Ten_pmax) {
1522 dval(&rv) *= tens[e];
1523 goto ret;
1524 }
1525 i = DBL_DIG - nd;
1526 if (e <= Ten_pmax + i) {
1527 /* A fancier test would sometimes let us do
1528 * this for larger i values.
1529 */
1530 e -= i;
1531 dval(&rv) *= tens[i];
1532 dval(&rv) *= tens[e];
1533 goto ret;
1534 }
1535 }
1536 else if (e >= -Ten_pmax) {
1537 dval(&rv) /= tens[-e];
1538 goto ret;
1539 }
1540 }
1541 e1 += nd - k;
1542
1543 bc.scale = 0;
1544
1545 /* Get starting approximation = rv * 10**e1 */
1546
1547 if (e1 > 0) {
1548 if ((i = e1 & 15))
1549 dval(&rv) *= tens[i];
1550 if (e1 &= ~15) {
1551 if (e1 > DBL_MAX_10_EXP) {
1552 ovfl:
1553 errno = ERANGE;
1554 /* Can't trust HUGE_VAL */
1555 word0(&rv) = Exp_mask;
1556 word1(&rv) = 0;
1557 goto ret;
1558 }
1559 e1 >>= 4;
1560 for(j = 0; e1 > 1; j++, e1 >>= 1)
1561 if (e1 & 1)
1562 dval(&rv) *= bigtens[j];
1563 /* The last multiplication could overflow. */
1564 word0(&rv) -= P*Exp_msk1;
1565 dval(&rv) *= bigtens[j];
1566 if ((z = word0(&rv) & Exp_mask)
1567 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1568 goto ovfl;
1569 if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1570 /* set to largest number */
1571 /* (Can't trust DBL_MAX) */
1572 word0(&rv) = Big0;
1573 word1(&rv) = Big1;
1574 }
1575 else
1576 word0(&rv) += P*Exp_msk1;
1577 }
1578 }
1579 else if (e1 < 0) {
1580 e1 = -e1;
1581 if ((i = e1 & 15))
1582 dval(&rv) /= tens[i];
1583 if (e1 >>= 4) {
1584 if (e1 >= 1 << n_bigtens)
1585 goto undfl;
1586 if (e1 & Scale_Bit)
1587 bc.scale = 2*P;
1588 for(j = 0; e1 > 0; j++, e1 >>= 1)
1589 if (e1 & 1)
1590 dval(&rv) *= tinytens[j];
1591 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1592 >> Exp_shift)) > 0) {
1593 /* scaled rv is denormal; clear j low bits */
1594 if (j >= 32) {
1595 word1(&rv) = 0;
1596 if (j >= 53)
1597 word0(&rv) = (P+2)*Exp_msk1;
1598 else
1599 word0(&rv) &= 0xffffffff << (j-32);
1600 }
1601 else
1602 word1(&rv) &= 0xffffffff << j;
1603 }
1604 if (!dval(&rv)) {
1605 undfl:
1606 dval(&rv) = 0.;
1607 errno = ERANGE;
1608 goto ret;
1609 }
1610 }
1611 }
1612
1613 /* Now the hard part -- adjusting rv to the correct value.*/
1614
1615 /* Put digits into bd: true value = bd * 10^e */
1616
1617 bc.nd = nd;
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001618 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001619 /* to silence an erroneous warning about bc.nd0 */
1620 /* possibly not being initialized. */
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001621 if (nd > STRTOD_DIGLIM) {
1622 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
Mark Dickinsonbb282852009-10-24 12:13:30 +00001623 /* minimum number of decimal digits to distinguish double values */
1624 /* in IEEE arithmetic. */
1625 i = j = 18;
1626 if (i > nd0)
1627 j += bc.dplen;
1628 for(;;) {
1629 if (--j <= bc.dp1 && j >= bc.dp0)
1630 j = bc.dp0 - 1;
1631 if (s0[j] != '0')
1632 break;
1633 --i;
1634 }
1635 e += nd - i;
1636 nd = i;
1637 if (nd0 > nd)
1638 nd0 = nd;
1639 if (nd < 9) { /* must recompute y */
1640 y = 0;
1641 for(i = 0; i < nd0; ++i)
1642 y = 10*y + s0[i] - '0';
1643 for(j = bc.dp1; i < nd; ++i)
1644 y = 10*y + s0[j++] - '0';
1645 }
1646 }
1647 bd0 = s2b(s0, nd0, nd, y, bc.dplen);
1648 if (bd0 == NULL)
1649 goto failed_malloc;
1650
1651 for(;;) {
1652 bd = Balloc(bd0->k);
1653 if (bd == NULL) {
1654 Bfree(bd0);
1655 goto failed_malloc;
1656 }
1657 Bcopy(bd, bd0);
1658 bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
1659 if (bb == NULL) {
1660 Bfree(bd);
1661 Bfree(bd0);
1662 goto failed_malloc;
1663 }
1664 bs = i2b(1);
1665 if (bs == NULL) {
1666 Bfree(bb);
1667 Bfree(bd);
1668 Bfree(bd0);
1669 goto failed_malloc;
1670 }
1671
1672 if (e >= 0) {
1673 bb2 = bb5 = 0;
1674 bd2 = bd5 = e;
1675 }
1676 else {
1677 bb2 = bb5 = -e;
1678 bd2 = bd5 = 0;
1679 }
1680 if (bbe >= 0)
1681 bb2 += bbe;
1682 else
1683 bd2 -= bbe;
1684 bs2 = bb2;
1685 j = bbe - bc.scale;
1686 i = j + bbbits - 1; /* logb(rv) */
1687 if (i < Emin) /* denormal */
1688 j += P - Emin;
1689 else
1690 j = P + 1 - bbbits;
1691 bb2 += j;
1692 bd2 += j;
1693 bd2 += bc.scale;
1694 i = bb2 < bd2 ? bb2 : bd2;
1695 if (i > bs2)
1696 i = bs2;
1697 if (i > 0) {
1698 bb2 -= i;
1699 bd2 -= i;
1700 bs2 -= i;
1701 }
1702 if (bb5 > 0) {
1703 bs = pow5mult(bs, bb5);
1704 if (bs == NULL) {
1705 Bfree(bb);
1706 Bfree(bd);
1707 Bfree(bd0);
1708 goto failed_malloc;
1709 }
1710 bb1 = mult(bs, bb);
1711 Bfree(bb);
1712 bb = bb1;
1713 if (bb == NULL) {
1714 Bfree(bs);
1715 Bfree(bd);
1716 Bfree(bd0);
1717 goto failed_malloc;
1718 }
1719 }
1720 if (bb2 > 0) {
1721 bb = lshift(bb, bb2);
1722 if (bb == NULL) {
1723 Bfree(bs);
1724 Bfree(bd);
1725 Bfree(bd0);
1726 goto failed_malloc;
1727 }
1728 }
1729 if (bd5 > 0) {
1730 bd = pow5mult(bd, bd5);
1731 if (bd == NULL) {
1732 Bfree(bb);
1733 Bfree(bs);
1734 Bfree(bd0);
1735 goto failed_malloc;
1736 }
1737 }
1738 if (bd2 > 0) {
1739 bd = lshift(bd, bd2);
1740 if (bd == NULL) {
1741 Bfree(bb);
1742 Bfree(bs);
1743 Bfree(bd0);
1744 goto failed_malloc;
1745 }
1746 }
1747 if (bs2 > 0) {
1748 bs = lshift(bs, bs2);
1749 if (bs == NULL) {
1750 Bfree(bb);
1751 Bfree(bd);
1752 Bfree(bd0);
1753 goto failed_malloc;
1754 }
1755 }
1756 delta = diff(bb, bd);
1757 if (delta == NULL) {
1758 Bfree(bb);
1759 Bfree(bs);
1760 Bfree(bd);
1761 Bfree(bd0);
1762 goto failed_malloc;
1763 }
1764 bc.dsign = delta->sign;
1765 delta->sign = 0;
1766 i = cmp(delta, bs);
1767 if (bc.nd > nd && i <= 0) {
1768 if (bc.dsign)
1769 break; /* Must use bigcomp(). */
1770 {
1771 bc.nd = nd;
1772 i = -1; /* Discarded digits make delta smaller. */
1773 }
1774 }
1775
1776 if (i < 0) {
1777 /* Error is less than half an ulp -- check for
1778 * special case of mantissa a power of two.
1779 */
1780 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask
1781 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1782 ) {
1783 break;
1784 }
1785 if (!delta->x[0] && delta->wds <= 1) {
1786 /* exact result */
1787 break;
1788 }
1789 delta = lshift(delta,Log2P);
1790 if (delta == NULL) {
1791 Bfree(bb);
1792 Bfree(bs);
1793 Bfree(bd);
1794 Bfree(bd0);
1795 goto failed_malloc;
1796 }
1797 if (cmp(delta, bs) > 0)
1798 goto drop_down;
1799 break;
1800 }
1801 if (i == 0) {
1802 /* exactly half-way between */
1803 if (bc.dsign) {
1804 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1805 && word1(&rv) == (
1806 (bc.scale &&
1807 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1808 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
1809 0xffffffff)) {
1810 /*boundary case -- increment exponent*/
1811 word0(&rv) = (word0(&rv) & Exp_mask)
1812 + Exp_msk1
1813 ;
1814 word1(&rv) = 0;
1815 bc.dsign = 0;
1816 break;
1817 }
1818 }
1819 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
1820 drop_down:
1821 /* boundary case -- decrement exponent */
1822 if (bc.scale) {
1823 L = word0(&rv) & Exp_mask;
1824 if (L <= (2*P+1)*Exp_msk1) {
1825 if (L > (P+2)*Exp_msk1)
1826 /* round even ==> */
1827 /* accept rv */
1828 break;
1829 /* rv = smallest denormal */
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001830 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001831 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001832 goto undfl;
1833 }
1834 }
1835 L = (word0(&rv) & Exp_mask) - Exp_msk1;
1836 word0(&rv) = L | Bndry_mask1;
1837 word1(&rv) = 0xffffffff;
1838 break;
1839 }
1840 if (!(word1(&rv) & LSB))
1841 break;
1842 if (bc.dsign)
1843 dval(&rv) += ulp(&rv);
1844 else {
1845 dval(&rv) -= ulp(&rv);
1846 if (!dval(&rv)) {
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001847 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001848 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001849 goto undfl;
1850 }
1851 }
1852 bc.dsign = 1 - bc.dsign;
1853 break;
1854 }
1855 if ((aadj = ratio(delta, bs)) <= 2.) {
1856 if (bc.dsign)
1857 aadj = aadj1 = 1.;
1858 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
1859 if (word1(&rv) == Tiny1 && !word0(&rv)) {
Mark Dickinson5a0b3992010-01-10 13:06:31 +00001860 if (bc.nd >nd)
Mark Dickinsonbb282852009-10-24 12:13:30 +00001861 break;
Mark Dickinsonbb282852009-10-24 12:13:30 +00001862 goto undfl;
1863 }
1864 aadj = 1.;
1865 aadj1 = -1.;
1866 }
1867 else {
1868 /* special case -- power of FLT_RADIX to be */
1869 /* rounded down... */
1870
1871 if (aadj < 2./FLT_RADIX)
1872 aadj = 1./FLT_RADIX;
1873 else
1874 aadj *= 0.5;
1875 aadj1 = -aadj;
1876 }
1877 }
1878 else {
1879 aadj *= 0.5;
1880 aadj1 = bc.dsign ? aadj : -aadj;
1881 if (Flt_Rounds == 0)
1882 aadj1 += 0.5;
1883 }
1884 y = word0(&rv) & Exp_mask;
1885
1886 /* Check for overflow */
1887
1888 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
1889 dval(&rv0) = dval(&rv);
1890 word0(&rv) -= P*Exp_msk1;
1891 adj.d = aadj1 * ulp(&rv);
1892 dval(&rv) += adj.d;
1893 if ((word0(&rv) & Exp_mask) >=
1894 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
1895 if (word0(&rv0) == Big0 && word1(&rv0) == Big1)
1896 goto ovfl;
1897 word0(&rv) = Big0;
1898 word1(&rv) = Big1;
1899 goto cont;
1900 }
1901 else
1902 word0(&rv) += P*Exp_msk1;
1903 }
1904 else {
1905 if (bc.scale && y <= 2*P*Exp_msk1) {
1906 if (aadj <= 0x7fffffff) {
1907 if ((z = (ULong)aadj) <= 0)
1908 z = 1;
1909 aadj = z;
1910 aadj1 = bc.dsign ? aadj : -aadj;
1911 }
1912 dval(&aadj2) = aadj1;
1913 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
1914 aadj1 = dval(&aadj2);
1915 }
1916 adj.d = aadj1 * ulp(&rv);
1917 dval(&rv) += adj.d;
1918 }
1919 z = word0(&rv) & Exp_mask;
1920 if (bc.nd == nd) {
1921 if (!bc.scale)
1922 if (y == z) {
1923 /* Can we stop now? */
1924 L = (Long)aadj;
1925 aadj -= L;
1926 /* The tolerances below are conservative. */
1927 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
1928 if (aadj < .4999999 || aadj > .5000001)
1929 break;
1930 }
1931 else if (aadj < .4999999/FLT_RADIX)
1932 break;
1933 }
1934 }
1935 cont:
1936 Bfree(bb);
1937 Bfree(bd);
1938 Bfree(bs);
1939 Bfree(delta);
1940 }
1941 Bfree(bb);
1942 Bfree(bd);
1943 Bfree(bs);
1944 Bfree(bd0);
1945 Bfree(delta);
1946 if (bc.nd > nd) {
1947 error = bigcomp(&rv, s0, &bc);
1948 if (error)
1949 goto failed_malloc;
1950 }
1951
1952 if (bc.scale) {
1953 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
1954 word1(&rv0) = 0;
1955 dval(&rv) *= dval(&rv0);
1956 /* try to avoid the bug of testing an 8087 register value */
1957 if (!(word0(&rv) & Exp_mask))
1958 errno = ERANGE;
1959 }
1960 ret:
1961 if (se)
1962 *se = (char *)s;
1963 return sign ? -dval(&rv) : dval(&rv);
1964
1965 failed_malloc:
1966 if (se)
1967 *se = (char *)s00;
1968 errno = ENOMEM;
1969 return -1.0;
1970}
1971
1972static char *
1973rv_alloc(int i)
1974{
1975 int j, k, *r;
1976
1977 j = sizeof(ULong);
1978 for(k = 0;
1979 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
1980 j <<= 1)
1981 k++;
1982 r = (int*)Balloc(k);
1983 if (r == NULL)
1984 return NULL;
1985 *r = k;
1986 return (char *)(r+1);
1987}
1988
1989static char *
1990nrv_alloc(char *s, char **rve, int n)
1991{
1992 char *rv, *t;
1993
1994 rv = rv_alloc(n);
1995 if (rv == NULL)
1996 return NULL;
1997 t = rv;
1998 while((*t = *s++)) t++;
1999 if (rve)
2000 *rve = t;
2001 return rv;
2002}
2003
2004/* freedtoa(s) must be used to free values s returned by dtoa
2005 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
2006 * but for consistency with earlier versions of dtoa, it is optional
2007 * when MULTIPLE_THREADS is not defined.
2008 */
2009
2010void
2011_Py_dg_freedtoa(char *s)
2012{
2013 Bigint *b = (Bigint *)((int *)s - 1);
2014 b->maxwds = 1 << (b->k = *(int*)b);
2015 Bfree(b);
2016}
2017
2018/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
2019 *
2020 * Inspired by "How to Print Floating-Point Numbers Accurately" by
2021 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
2022 *
2023 * Modifications:
2024 * 1. Rather than iterating, we use a simple numeric overestimate
2025 * to determine k = floor(log10(d)). We scale relevant
2026 * quantities using O(log2(k)) rather than O(k) multiplications.
2027 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
2028 * try to generate digits strictly left to right. Instead, we
2029 * compute with fewer bits and propagate the carry if necessary
2030 * when rounding the final digit up. This is often faster.
2031 * 3. Under the assumption that input will be rounded nearest,
2032 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
2033 * That is, we allow equality in stopping tests when the
2034 * round-nearest rule will give the same floating-point value
2035 * as would satisfaction of the stopping test with strict
2036 * inequality.
2037 * 4. We remove common factors of powers of 2 from relevant
2038 * quantities.
2039 * 5. When converting floating-point integers less than 1e16,
2040 * we use floating-point arithmetic rather than resorting
2041 * to multiple-precision integers.
2042 * 6. When asked to produce fewer than 15 digits, we first try
2043 * to get by with floating-point arithmetic; we resort to
2044 * multiple-precision integer arithmetic only if we cannot
2045 * guarantee that the floating-point calculation has given
2046 * the correctly rounded result. For k requested digits and
2047 * "uniformly" distributed input, the probability is
2048 * something like 10^(k-15) that we must resort to the Long
2049 * calculation.
2050 */
2051
2052/* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2053 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2054 call to _Py_dg_freedtoa. */
2055
2056char *
2057_Py_dg_dtoa(double dd, int mode, int ndigits,
2058 int *decpt, int *sign, char **rve)
2059{
2060 /* Arguments ndigits, decpt, sign are similar to those
2061 of ecvt and fcvt; trailing zeros are suppressed from
2062 the returned string. If not null, *rve is set to point
2063 to the end of the return value. If d is +-Infinity or NaN,
2064 then *decpt is set to 9999.
2065
2066 mode:
2067 0 ==> shortest string that yields d when read in
2068 and rounded to nearest.
2069 1 ==> like 0, but with Steele & White stopping rule;
2070 e.g. with IEEE P754 arithmetic , mode 0 gives
2071 1e23 whereas mode 1 gives 9.999999999999999e22.
2072 2 ==> max(1,ndigits) significant digits. This gives a
2073 return value similar to that of ecvt, except
2074 that trailing zeros are suppressed.
2075 3 ==> through ndigits past the decimal point. This
2076 gives a return value similar to that from fcvt,
2077 except that trailing zeros are suppressed, and
2078 ndigits can be negative.
2079 4,5 ==> similar to 2 and 3, respectively, but (in
2080 round-nearest mode) with the tests of mode 0 to
2081 possibly return a shorter string that rounds to d.
2082 With IEEE arithmetic and compilation with
2083 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2084 as modes 2 and 3 when FLT_ROUNDS != 1.
2085 6-9 ==> Debugging modes similar to mode - 4: don't try
2086 fast floating-point estimate (if applicable).
2087
2088 Values of mode other than 0-9 are treated as mode 0.
2089
2090 Sufficient space is allocated to the return value
2091 to hold the suppressed trailing zeros.
2092 */
2093
2094 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2095 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2096 spec_case, try_quick;
2097 Long L;
2098 int denorm;
2099 ULong x;
2100 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2101 U d2, eps, u;
2102 double ds;
2103 char *s, *s0;
2104
2105 /* set pointers to NULL, to silence gcc compiler warnings and make
2106 cleanup easier on error */
2107 mlo = mhi = b = S = 0;
2108 s0 = 0;
2109
2110 u.d = dd;
2111 if (word0(&u) & Sign_bit) {
2112 /* set sign for everything, including 0's and NaNs */
2113 *sign = 1;
2114 word0(&u) &= ~Sign_bit; /* clear sign bit */
2115 }
2116 else
2117 *sign = 0;
2118
2119 /* quick return for Infinities, NaNs and zeros */
2120 if ((word0(&u) & Exp_mask) == Exp_mask)
2121 {
2122 /* Infinity or NaN */
2123 *decpt = 9999;
2124 if (!word1(&u) && !(word0(&u) & 0xfffff))
2125 return nrv_alloc("Infinity", rve, 8);
2126 return nrv_alloc("NaN", rve, 3);
2127 }
2128 if (!dval(&u)) {
2129 *decpt = 1;
2130 return nrv_alloc("0", rve, 1);
2131 }
2132
2133 /* compute k = floor(log10(d)). The computation may leave k
2134 one too large, but should never leave k too small. */
2135 b = d2b(&u, &be, &bbits);
2136 if (b == NULL)
2137 goto failed_malloc;
2138 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2139 dval(&d2) = dval(&u);
2140 word0(&d2) &= Frac_mask1;
2141 word0(&d2) |= Exp_11;
2142
2143 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2144 * log10(x) = log(x) / log(10)
2145 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2146 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2147 *
2148 * This suggests computing an approximation k to log10(d) by
2149 *
2150 * k = (i - Bias)*0.301029995663981
2151 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2152 *
2153 * We want k to be too large rather than too small.
2154 * The error in the first-order Taylor series approximation
2155 * is in our favor, so we just round up the constant enough
2156 * to compensate for any error in the multiplication of
2157 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2158 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2159 * adding 1e-13 to the constant term more than suffices.
2160 * Hence we adjust the constant term to 0.1760912590558.
2161 * (We could get a more accurate k by invoking log10,
2162 * but this is probably not worthwhile.)
2163 */
2164
2165 i -= Bias;
2166 denorm = 0;
2167 }
2168 else {
2169 /* d is denormalized */
2170
2171 i = bbits + be + (Bias + (P-1) - 1);
2172 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2173 : word1(&u) << (32 - i);
2174 dval(&d2) = x;
2175 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2176 i -= (Bias + (P-1) - 1) + 1;
2177 denorm = 1;
2178 }
2179 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2180 i*0.301029995663981;
2181 k = (int)ds;
2182 if (ds < 0. && ds != k)
2183 k--; /* want k = floor(ds) */
2184 k_check = 1;
2185 if (k >= 0 && k <= Ten_pmax) {
2186 if (dval(&u) < tens[k])
2187 k--;
2188 k_check = 0;
2189 }
2190 j = bbits - i - 1;
2191 if (j >= 0) {
2192 b2 = 0;
2193 s2 = j;
2194 }
2195 else {
2196 b2 = -j;
2197 s2 = 0;
2198 }
2199 if (k >= 0) {
2200 b5 = 0;
2201 s5 = k;
2202 s2 += k;
2203 }
2204 else {
2205 b2 -= k;
2206 b5 = -k;
2207 s5 = 0;
2208 }
2209 if (mode < 0 || mode > 9)
2210 mode = 0;
2211
2212 try_quick = 1;
2213
2214 if (mode > 5) {
2215 mode -= 4;
2216 try_quick = 0;
2217 }
2218 leftright = 1;
2219 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2220 /* silence erroneous "gcc -Wall" warning. */
2221 switch(mode) {
2222 case 0:
2223 case 1:
2224 i = 18;
2225 ndigits = 0;
2226 break;
2227 case 2:
2228 leftright = 0;
2229 /* no break */
2230 case 4:
2231 if (ndigits <= 0)
2232 ndigits = 1;
2233 ilim = ilim1 = i = ndigits;
2234 break;
2235 case 3:
2236 leftright = 0;
2237 /* no break */
2238 case 5:
2239 i = ndigits + k + 1;
2240 ilim = i;
2241 ilim1 = i - 1;
2242 if (i <= 0)
2243 i = 1;
2244 }
2245 s0 = rv_alloc(i);
2246 if (s0 == NULL)
2247 goto failed_malloc;
2248 s = s0;
2249
2250
2251 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2252
2253 /* Try to get by with floating-point arithmetic. */
2254
2255 i = 0;
2256 dval(&d2) = dval(&u);
2257 k0 = k;
2258 ilim0 = ilim;
2259 ieps = 2; /* conservative */
2260 if (k > 0) {
2261 ds = tens[k&0xf];
2262 j = k >> 4;
2263 if (j & Bletch) {
2264 /* prevent overflows */
2265 j &= Bletch - 1;
2266 dval(&u) /= bigtens[n_bigtens-1];
2267 ieps++;
2268 }
2269 for(; j; j >>= 1, i++)
2270 if (j & 1) {
2271 ieps++;
2272 ds *= bigtens[i];
2273 }
2274 dval(&u) /= ds;
2275 }
2276 else if ((j1 = -k)) {
2277 dval(&u) *= tens[j1 & 0xf];
2278 for(j = j1 >> 4; j; j >>= 1, i++)
2279 if (j & 1) {
2280 ieps++;
2281 dval(&u) *= bigtens[i];
2282 }
2283 }
2284 if (k_check && dval(&u) < 1. && ilim > 0) {
2285 if (ilim1 <= 0)
2286 goto fast_failed;
2287 ilim = ilim1;
2288 k--;
2289 dval(&u) *= 10.;
2290 ieps++;
2291 }
2292 dval(&eps) = ieps*dval(&u) + 7.;
2293 word0(&eps) -= (P-1)*Exp_msk1;
2294 if (ilim == 0) {
2295 S = mhi = 0;
2296 dval(&u) -= 5.;
2297 if (dval(&u) > dval(&eps))
2298 goto one_digit;
2299 if (dval(&u) < -dval(&eps))
2300 goto no_digits;
2301 goto fast_failed;
2302 }
2303 if (leftright) {
2304 /* Use Steele & White method of only
2305 * generating digits needed.
2306 */
2307 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2308 for(i = 0;;) {
2309 L = (Long)dval(&u);
2310 dval(&u) -= L;
2311 *s++ = '0' + (int)L;
2312 if (dval(&u) < dval(&eps))
2313 goto ret1;
2314 if (1. - dval(&u) < dval(&eps))
2315 goto bump_up;
2316 if (++i >= ilim)
2317 break;
2318 dval(&eps) *= 10.;
2319 dval(&u) *= 10.;
2320 }
2321 }
2322 else {
2323 /* Generate ilim digits, then fix them up. */
2324 dval(&eps) *= tens[ilim-1];
2325 for(i = 1;; i++, dval(&u) *= 10.) {
2326 L = (Long)(dval(&u));
2327 if (!(dval(&u) -= L))
2328 ilim = i;
2329 *s++ = '0' + (int)L;
2330 if (i == ilim) {
2331 if (dval(&u) > 0.5 + dval(&eps))
2332 goto bump_up;
2333 else if (dval(&u) < 0.5 - dval(&eps)) {
2334 while(*--s == '0');
2335 s++;
2336 goto ret1;
2337 }
2338 break;
2339 }
2340 }
2341 }
2342 fast_failed:
2343 s = s0;
2344 dval(&u) = dval(&d2);
2345 k = k0;
2346 ilim = ilim0;
2347 }
2348
2349 /* Do we have a "small" integer? */
2350
2351 if (be >= 0 && k <= Int_max) {
2352 /* Yes. */
2353 ds = tens[k];
2354 if (ndigits < 0 && ilim <= 0) {
2355 S = mhi = 0;
2356 if (ilim < 0 || dval(&u) <= 5*ds)
2357 goto no_digits;
2358 goto one_digit;
2359 }
2360 for(i = 1;; i++, dval(&u) *= 10.) {
2361 L = (Long)(dval(&u) / ds);
2362 dval(&u) -= L*ds;
2363 *s++ = '0' + (int)L;
2364 if (!dval(&u)) {
2365 break;
2366 }
2367 if (i == ilim) {
2368 dval(&u) += dval(&u);
2369 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2370 bump_up:
2371 while(*--s == '9')
2372 if (s == s0) {
2373 k++;
2374 *s = '0';
2375 break;
2376 }
2377 ++*s++;
2378 }
2379 break;
2380 }
2381 }
2382 goto ret1;
2383 }
2384
2385 m2 = b2;
2386 m5 = b5;
2387 if (leftright) {
2388 i =
2389 denorm ? be + (Bias + (P-1) - 1 + 1) :
2390 1 + P - bbits;
2391 b2 += i;
2392 s2 += i;
2393 mhi = i2b(1);
2394 if (mhi == NULL)
2395 goto failed_malloc;
2396 }
2397 if (m2 > 0 && s2 > 0) {
2398 i = m2 < s2 ? m2 : s2;
2399 b2 -= i;
2400 m2 -= i;
2401 s2 -= i;
2402 }
2403 if (b5 > 0) {
2404 if (leftright) {
2405 if (m5 > 0) {
2406 mhi = pow5mult(mhi, m5);
2407 if (mhi == NULL)
2408 goto failed_malloc;
2409 b1 = mult(mhi, b);
2410 Bfree(b);
2411 b = b1;
2412 if (b == NULL)
2413 goto failed_malloc;
2414 }
2415 if ((j = b5 - m5)) {
2416 b = pow5mult(b, j);
2417 if (b == NULL)
2418 goto failed_malloc;
2419 }
2420 }
2421 else {
2422 b = pow5mult(b, b5);
2423 if (b == NULL)
2424 goto failed_malloc;
2425 }
2426 }
2427 S = i2b(1);
2428 if (S == NULL)
2429 goto failed_malloc;
2430 if (s5 > 0) {
2431 S = pow5mult(S, s5);
2432 if (S == NULL)
2433 goto failed_malloc;
2434 }
2435
2436 /* Check for special case that d is a normalized power of 2. */
2437
2438 spec_case = 0;
2439 if ((mode < 2 || leftright)
2440 ) {
2441 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2442 && word0(&u) & (Exp_mask & ~Exp_msk1)
2443 ) {
2444 /* The special case */
2445 b2 += Log2P;
2446 s2 += Log2P;
2447 spec_case = 1;
2448 }
2449 }
2450
2451 /* Arrange for convenient computation of quotients:
2452 * shift left if necessary so divisor has 4 leading 0 bits.
2453 *
2454 * Perhaps we should just compute leading 28 bits of S once
2455 * and for all and pass them and a shift to quorem, so it
2456 * can do shifts and ors to compute the numerator for q.
2457 */
2458 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
2459 i = 32 - i;
2460#define iInc 28
2461 i = dshift(S, s2);
2462 b2 += i;
2463 m2 += i;
2464 s2 += i;
2465 if (b2 > 0) {
2466 b = lshift(b, b2);
2467 if (b == NULL)
2468 goto failed_malloc;
2469 }
2470 if (s2 > 0) {
2471 S = lshift(S, s2);
2472 if (S == NULL)
2473 goto failed_malloc;
2474 }
2475 if (k_check) {
2476 if (cmp(b,S) < 0) {
2477 k--;
2478 b = multadd(b, 10, 0); /* we botched the k estimate */
2479 if (b == NULL)
2480 goto failed_malloc;
2481 if (leftright) {
2482 mhi = multadd(mhi, 10, 0);
2483 if (mhi == NULL)
2484 goto failed_malloc;
2485 }
2486 ilim = ilim1;
2487 }
2488 }
2489 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2490 if (ilim < 0) {
2491 /* no digits, fcvt style */
2492 no_digits:
2493 k = -1 - ndigits;
2494 goto ret;
2495 }
2496 else {
2497 S = multadd(S, 5, 0);
2498 if (S == NULL)
2499 goto failed_malloc;
2500 if (cmp(b, S) <= 0)
2501 goto no_digits;
2502 }
2503 one_digit:
2504 *s++ = '1';
2505 k++;
2506 goto ret;
2507 }
2508 if (leftright) {
2509 if (m2 > 0) {
2510 mhi = lshift(mhi, m2);
2511 if (mhi == NULL)
2512 goto failed_malloc;
2513 }
2514
2515 /* Compute mlo -- check for special case
2516 * that d is a normalized power of 2.
2517 */
2518
2519 mlo = mhi;
2520 if (spec_case) {
2521 mhi = Balloc(mhi->k);
2522 if (mhi == NULL)
2523 goto failed_malloc;
2524 Bcopy(mhi, mlo);
2525 mhi = lshift(mhi, Log2P);
2526 if (mhi == NULL)
2527 goto failed_malloc;
2528 }
2529
2530 for(i = 1;;i++) {
2531 dig = quorem(b,S) + '0';
2532 /* Do we yet have the shortest decimal string
2533 * that will round to d?
2534 */
2535 j = cmp(b, mlo);
2536 delta = diff(S, mhi);
2537 if (delta == NULL)
2538 goto failed_malloc;
2539 j1 = delta->sign ? 1 : cmp(b, delta);
2540 Bfree(delta);
2541 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2542 ) {
2543 if (dig == '9')
2544 goto round_9_up;
2545 if (j > 0)
2546 dig++;
2547 *s++ = dig;
2548 goto ret;
2549 }
2550 if (j < 0 || (j == 0 && mode != 1
2551 && !(word1(&u) & 1)
2552 )) {
2553 if (!b->x[0] && b->wds <= 1) {
2554 goto accept_dig;
2555 }
2556 if (j1 > 0) {
2557 b = lshift(b, 1);
2558 if (b == NULL)
2559 goto failed_malloc;
2560 j1 = cmp(b, S);
2561 if ((j1 > 0 || (j1 == 0 && dig & 1))
2562 && dig++ == '9')
2563 goto round_9_up;
2564 }
2565 accept_dig:
2566 *s++ = dig;
2567 goto ret;
2568 }
2569 if (j1 > 0) {
2570 if (dig == '9') { /* possible if i == 1 */
2571 round_9_up:
2572 *s++ = '9';
2573 goto roundoff;
2574 }
2575 *s++ = dig + 1;
2576 goto ret;
2577 }
2578 *s++ = dig;
2579 if (i == ilim)
2580 break;
2581 b = multadd(b, 10, 0);
2582 if (b == NULL)
2583 goto failed_malloc;
2584 if (mlo == mhi) {
2585 mlo = mhi = multadd(mhi, 10, 0);
2586 if (mlo == NULL)
2587 goto failed_malloc;
2588 }
2589 else {
2590 mlo = multadd(mlo, 10, 0);
2591 if (mlo == NULL)
2592 goto failed_malloc;
2593 mhi = multadd(mhi, 10, 0);
2594 if (mhi == NULL)
2595 goto failed_malloc;
2596 }
2597 }
2598 }
2599 else
2600 for(i = 1;; i++) {
2601 *s++ = dig = quorem(b,S) + '0';
2602 if (!b->x[0] && b->wds <= 1) {
2603 goto ret;
2604 }
2605 if (i >= ilim)
2606 break;
2607 b = multadd(b, 10, 0);
2608 if (b == NULL)
2609 goto failed_malloc;
2610 }
2611
2612 /* Round off last digit */
2613
2614 b = lshift(b, 1);
2615 if (b == NULL)
2616 goto failed_malloc;
2617 j = cmp(b, S);
2618 if (j > 0 || (j == 0 && dig & 1)) {
2619 roundoff:
2620 while(*--s == '9')
2621 if (s == s0) {
2622 k++;
2623 *s++ = '1';
2624 goto ret;
2625 }
2626 ++*s++;
2627 }
2628 else {
2629 while(*--s == '0');
2630 s++;
2631 }
2632 ret:
2633 Bfree(S);
2634 if (mhi) {
2635 if (mlo && mlo != mhi)
2636 Bfree(mlo);
2637 Bfree(mhi);
2638 }
2639 ret1:
2640 Bfree(b);
2641 *s = 0;
2642 *decpt = k + 1;
2643 if (rve)
2644 *rve = s;
2645 return s0;
2646 failed_malloc:
2647 if (S)
2648 Bfree(S);
2649 if (mlo && mlo != mhi)
2650 Bfree(mlo);
2651 if (mhi)
2652 Bfree(mhi);
2653 if (b)
2654 Bfree(b);
2655 if (s0)
2656 _Py_dg_freedtoa(s0);
2657 return NULL;
2658}
2659#ifdef __cplusplus
2660}
2661#endif
2662
2663#endif /* PY_NO_SHORT_FLOAT_REPR */