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