blob: 1fe20f4f53b40ec727523423f7a285118897391d [file] [log] [blame]
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001/****************************************************************
2 *
3 * The author of this software is David M. Gay.
4 *
5 * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
6 *
7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose without fee is hereby granted, provided that this entire notice
9 * is included in all copies of any software which is or includes a copy
10 * or modification of this software and in all copies of the supporting
11 * documentation for such software.
12 *
13 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
14 * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY
15 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
16 * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
17 *
18 ***************************************************************/
19
20/****************************************************************
21 * This is dtoa.c by David M. Gay, downloaded from
22 * http://www.netlib.org/fp/dtoa.c on April 15, 2009 and modified for
23 * inclusion into the Python core by Mark E. T. Dickinson and Eric V. Smith.
Mark Dickinson7f0ea322009-04-17 16:06:28 +000024 *
25 * Please remember to check http://www.netlib.org/fp regularly (and especially
26 * before any Python release) for bugfixes and updates.
27 *
28 * The major modifications from Gay's original code are as follows:
Mark Dickinsonb08a53a2009-04-16 19:52:09 +000029 *
30 * 0. The original code has been specialized to Python's needs by removing
31 * many of the #ifdef'd sections. In particular, code to support VAX and
32 * IBM floating-point formats, hex NaNs, hex floats, locale-aware
33 * treatment of the decimal point, and setting of the inexact flag have
34 * been removed.
35 *
36 * 1. We use PyMem_Malloc and PyMem_Free in place of malloc and free.
37 *
38 * 2. The public functions strtod, dtoa and freedtoa all now have
39 * a _Py_dg_ prefix.
40 *
41 * 3. Instead of assuming that PyMem_Malloc always succeeds, we thread
42 * PyMem_Malloc failures through the code. The functions
43 *
44 * Balloc, multadd, s2b, i2b, mult, pow5mult, lshift, diff, d2b
45 *
46 * of return type *Bigint all return NULL to indicate a malloc failure.
47 * Similarly, rv_alloc and nrv_alloc (return type char *) return NULL on
48 * failure. bigcomp now has return type int (it used to be void) and
49 * returns -1 on failure and 0 otherwise. _Py_dg_dtoa returns NULL
50 * on failure. _Py_dg_strtod indicates failure due to malloc failure
51 * by returning -1.0, setting errno=ENOMEM and *se to s00.
52 *
53 * 4. The static variable dtoa_result has been removed. Callers of
54 * _Py_dg_dtoa are expected to call _Py_dg_freedtoa to free
55 * the memory allocated by _Py_dg_dtoa.
56 *
57 * 5. The code has been reformatted to better fit with Python's
58 * C style guide (PEP 7).
59 *
Mark Dickinson7f0ea322009-04-17 16:06:28 +000060 * 6. A bug in the memory allocation has been fixed: to avoid FREEing memory
61 * that hasn't been MALLOC'ed, private_mem should only be used when k <=
62 * Kmax.
63 *
Mark Dickinson725bfd82009-05-03 20:33:40 +000064 * 7. _Py_dg_strtod has been modified so that it doesn't accept strings with
65 * leading whitespace.
66 *
Mark Dickinsonb08a53a2009-04-16 19:52:09 +000067 ***************************************************************/
68
69/* Please send bug reports for the original dtoa.c code to David M. Gay (dmg
70 * at acm dot org, with " at " changed at "@" and " dot " changed to ".").
71 * Please report bugs for this modified version using the Python issue tracker
72 * (http://bugs.python.org). */
73
74/* On a machine with IEEE extended-precision registers, it is
75 * necessary to specify double-precision (53-bit) rounding precision
76 * before invoking strtod or dtoa. If the machine uses (the equivalent
77 * of) Intel 80x87 arithmetic, the call
78 * _control87(PC_53, MCW_PC);
79 * does this with many compilers. Whether this or another call is
80 * appropriate depends on the compiler; for this to work, it may be
81 * necessary to #include "float.h" or another system-dependent header
82 * file.
83 */
84
85/* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
86 *
87 * This strtod returns a nearest machine number to the input decimal
88 * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
89 * broken by the IEEE round-even rule. Otherwise ties are broken by
90 * biased rounding (add half and chop).
91 *
92 * Inspired loosely by William D. Clinger's paper "How to Read Floating
93 * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
94 *
95 * Modifications:
96 *
97 * 1. We only require IEEE, IBM, or VAX double-precision
98 * arithmetic (not IEEE double-extended).
99 * 2. We get by with floating-point arithmetic in a case that
100 * Clinger missed -- when we're computing d * 10^n
101 * for a small integer d and the integer n is not too
102 * much larger than 22 (the maximum integer k for which
103 * we can represent 10^k exactly), we may be able to
104 * compute (d*10^k) * 10^(e-k) with just one roundoff.
105 * 3. Rather than a bit-at-a-time adjustment of the binary
106 * result in the hard case, we use floating-point
107 * arithmetic to determine the adjustment to within
108 * one bit; only in really hard cases do we need to
109 * compute a second residual.
110 * 4. Because of 3., we don't need a large table of powers of 10
111 * for ten-to-e (just some small tables, e.g. of 10^k
112 * for 0 <= k <= 22).
113 */
114
115/* Linking of Python's #defines to Gay's #defines starts here. */
116
117#include "Python.h"
118
119/* if PY_NO_SHORT_FLOAT_REPR is defined, then don't even try to compile
120 the following code */
121#ifndef PY_NO_SHORT_FLOAT_REPR
122
123#include "float.h"
124
125#define MALLOC PyMem_Malloc
126#define FREE PyMem_Free
127
128/* This code should also work for ARM mixed-endian format on little-endian
129 machines, where doubles have byte order 45670123 (in increasing address
130 order, 0 being the least significant byte). */
131#ifdef DOUBLE_IS_LITTLE_ENDIAN_IEEE754
132# define IEEE_8087
133#endif
134#if defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) || \
135 defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754)
136# define IEEE_MC68k
137#endif
138#if defined(IEEE_8087) + defined(IEEE_MC68k) != 1
139#error "Exactly one of IEEE_8087 or IEEE_MC68k should be defined."
140#endif
141
142/* The code below assumes that the endianness of integers matches the
143 endianness of the two 32-bit words of a double. Check this. */
144#if defined(WORDS_BIGENDIAN) && (defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) || \
145 defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754))
146#error "doubles and ints have incompatible endianness"
147#endif
148
149#if !defined(WORDS_BIGENDIAN) && defined(DOUBLE_IS_BIG_ENDIAN_IEEE754)
150#error "doubles and ints have incompatible endianness"
151#endif
152
153
154#if defined(HAVE_UINT32_T) && defined(HAVE_INT32_T)
155typedef PY_UINT32_T ULong;
156typedef PY_INT32_T Long;
157#else
158#error "Failed to find an exact-width 32-bit integer type"
159#endif
160
161#if defined(HAVE_UINT64_T)
162#define ULLong PY_UINT64_T
163#else
164#undef ULLong
165#endif
166
167#undef DEBUG
168#ifdef Py_DEBUG
169#define DEBUG
170#endif
171
172/* End Python #define linking */
173
174#ifdef DEBUG
175#define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
176#endif
177
178#ifndef PRIVATE_MEM
179#define PRIVATE_MEM 2304
180#endif
181#define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
182static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
183
184#ifdef __cplusplus
185extern "C" {
186#endif
187
188typedef union { double d; ULong L[2]; } U;
189
190#ifdef IEEE_8087
191#define word0(x) (x)->L[1]
192#define word1(x) (x)->L[0]
193#else
194#define word0(x) (x)->L[0]
195#define word1(x) (x)->L[1]
196#endif
197#define dval(x) (x)->d
198
199#ifndef STRTOD_DIGLIM
200#define STRTOD_DIGLIM 40
201#endif
202
Mark Dickinson81612e82010-01-12 23:04:19 +0000203/* maximum permitted exponent value for strtod; exponents larger than
204 MAX_ABS_EXP in absolute value get truncated to +-MAX_ABS_EXP. MAX_ABS_EXP
205 should fit into an int. */
206#ifndef MAX_ABS_EXP
207#define MAX_ABS_EXP 19999U
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000208#endif
209
210/* The following definition of Storeinc is appropriate for MIPS processors.
211 * An alternative that might be better on some machines is
212 * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
213 */
214#if defined(IEEE_8087)
215#define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
216 ((unsigned short *)a)[0] = (unsigned short)c, a++)
217#else
218#define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
219 ((unsigned short *)a)[1] = (unsigned short)c, a++)
220#endif
221
222/* #define P DBL_MANT_DIG */
223/* Ten_pmax = floor(P*log(2)/log(5)) */
224/* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
225/* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
226/* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
227
228#define Exp_shift 20
229#define Exp_shift1 20
230#define Exp_msk1 0x100000
231#define Exp_msk11 0x100000
232#define Exp_mask 0x7ff00000
233#define P 53
234#define Nbits 53
235#define Bias 1023
236#define Emax 1023
237#define Emin (-1022)
238#define Exp_1 0x3ff00000
239#define Exp_11 0x3ff00000
240#define Ebits 11
241#define Frac_mask 0xfffff
242#define Frac_mask1 0xfffff
243#define Ten_pmax 22
244#define Bletch 0x10
245#define Bndry_mask 0xfffff
246#define Bndry_mask1 0xfffff
247#define LSB 1
248#define Sign_bit 0x80000000
249#define Log2P 1
250#define Tiny0 0
251#define Tiny1 1
252#define Quick_max 14
253#define Int_max 14
254
255#ifndef Flt_Rounds
256#ifdef FLT_ROUNDS
257#define Flt_Rounds FLT_ROUNDS
258#else
259#define Flt_Rounds 1
260#endif
261#endif /*Flt_Rounds*/
262
263#define Rounding Flt_Rounds
264
265#define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
266#define Big1 0xffffffff
267
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000268/* struct BCinfo is used to pass information from _Py_dg_strtod to bigcomp */
269
270typedef struct BCinfo BCinfo;
271struct
272BCinfo {
Mark Dickinson81612e82010-01-12 23:04:19 +0000273 int dp0, dp1, dplen, dsign, e0, nd, nd0, scale;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000274};
275
276#define FFFFFFFF 0xffffffffUL
277
278#define Kmax 7
279
280/* struct Bigint is used to represent arbitrary-precision integers. These
281 integers are stored in sign-magnitude format, with the magnitude stored as
282 an array of base 2**32 digits. Bigints are always normalized: if x is a
283 Bigint then x->wds >= 1, and either x->wds == 1 or x[wds-1] is nonzero.
284
285 The Bigint fields are as follows:
286
287 - next is a header used by Balloc and Bfree to keep track of lists
288 of freed Bigints; it's also used for the linked list of
289 powers of 5 of the form 5**2**i used by pow5mult.
290 - k indicates which pool this Bigint was allocated from
291 - maxwds is the maximum number of words space was allocated for
292 (usually maxwds == 2**k)
293 - sign is 1 for negative Bigints, 0 for positive. The sign is unused
294 (ignored on inputs, set to 0 on outputs) in almost all operations
295 involving Bigints: a notable exception is the diff function, which
296 ignores signs on inputs but sets the sign of the output correctly.
297 - wds is the actual number of significant words
298 - x contains the vector of words (digits) for this Bigint, from least
299 significant (x[0]) to most significant (x[wds-1]).
300*/
301
302struct
303Bigint {
304 struct Bigint *next;
305 int k, maxwds, sign, wds;
306 ULong x[1];
307};
308
309typedef struct Bigint Bigint;
310
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);
Mark Dickinson7f0ea322009-04-17 16:06:28 +0000347 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000348 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;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000406 *x++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000407#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;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000613 *xc++ = (ULong)(z & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000614 }
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;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000843 *xc++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000844 }
845 while(xb < xbe);
846 while(xa < xae) {
847 y = *xa++ - borrow;
848 borrow = y >> 32 & (ULong)1;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +0000849 *xc++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +0000850 }
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 Dickinson180e4cd2010-01-04 21:33:31 +0000930 significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
Mark Dickinsonb08a53a2009-04-16 19:52:09 +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
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001020#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;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +00001075 *bx++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001076#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;
Mark Dickinsonfd2ad8b2009-04-17 19:29:46 +00001108 *bx++ = (ULong)(y & FFFFFFFF);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001109#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 Dickinson81612e82010-01-12 23:04:19 +00001133/* version of ulp(x) that takes bc.scale into account.
1134
1135 Assuming that x is finite and nonzero, and x / 2^bc.scale is exactly
1136 representable as a double, sulp(x) is equivalent to 2^bc.scale * ulp(x /
1137 2^bc.scale). */
1138
1139static double
1140sulp(U *x, BCinfo *bc)
1141{
1142 U u;
1143
1144 if (bc->scale && 2*P + 1 - ((word0(x) & Exp_mask) >> Exp_shift) > 0) {
1145 /* rv/2^bc->scale is subnormal */
1146 word0(&u) = (P+2)*Exp_msk1;
1147 word1(&u) = 0;
1148 return u.d;
1149 }
1150 else
1151 return ulp(x);
1152}
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001153
1154/* return 0 on success, -1 on failure */
1155
1156static int
1157bigcomp(U *rv, const char *s0, BCinfo *bc)
1158{
1159 Bigint *b, *d;
1160 int b2, bbits, d2, dd, dig, dsign, i, j, nd, nd0, p2, p5, speccase;
1161
1162 dsign = bc->dsign;
1163 nd = bc->nd;
1164 nd0 = bc->nd0;
Mark Dickinson81612e82010-01-12 23:04:19 +00001165 p5 = nd + bc->e0;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001166 speccase = 0;
1167 if (rv->d == 0.) { /* special case: value near underflow-to-zero */
1168 /* threshold was rounded to zero */
1169 b = i2b(1);
1170 if (b == NULL)
1171 return -1;
1172 p2 = Emin - P + 1;
1173 bbits = 1;
1174 word0(rv) = (P+2) << Exp_shift;
1175 i = 0;
1176 {
1177 speccase = 1;
1178 --p2;
1179 dsign = 0;
1180 goto have_i;
1181 }
1182 }
1183 else
1184 {
1185 b = d2b(rv, &p2, &bbits);
1186 if (b == NULL)
1187 return -1;
1188 }
1189 p2 -= bc->scale;
1190 /* floor(log2(rv)) == bbits - 1 + p2 */
1191 /* Check for denormal case. */
1192 i = P - bbits;
1193 if (i > (j = P - Emin - 1 + p2)) {
1194 i = j;
1195 }
1196 {
1197 b = lshift(b, ++i);
1198 if (b == NULL)
1199 return -1;
1200 b->x[0] |= 1;
1201 }
1202 have_i:
1203 p2 -= p5 + i;
1204 d = i2b(1);
1205 if (d == NULL) {
1206 Bfree(b);
1207 return -1;
1208 }
1209 /* Arrange for convenient computation of quotients:
1210 * shift left if necessary so divisor has 4 leading 0 bits.
1211 */
1212 if (p5 > 0) {
1213 d = pow5mult(d, p5);
1214 if (d == NULL) {
1215 Bfree(b);
1216 return -1;
1217 }
1218 }
1219 else if (p5 < 0) {
1220 b = pow5mult(b, -p5);
1221 if (b == NULL) {
1222 Bfree(d);
1223 return -1;
1224 }
1225 }
1226 if (p2 > 0) {
1227 b2 = p2;
1228 d2 = 0;
1229 }
1230 else {
1231 b2 = 0;
1232 d2 = -p2;
1233 }
1234 i = dshift(d, d2);
1235 if ((b2 += i) > 0) {
1236 b = lshift(b, b2);
1237 if (b == NULL) {
1238 Bfree(d);
1239 return -1;
1240 }
1241 }
1242 if ((d2 += i) > 0) {
1243 d = lshift(d, d2);
1244 if (d == NULL) {
1245 Bfree(b);
1246 return -1;
1247 }
1248 }
1249
Mark Dickinson81612e82010-01-12 23:04:19 +00001250 /* Now 10*b/d = exactly half-way between the two floating-point values
1251 on either side of the input string. If b >= d, round down. */
1252 if (cmp(b, d) >= 0) {
1253 dd = -1;
1254 goto ret;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001255 }
Mark Dickinson81612e82010-01-12 23:04:19 +00001256
1257 /* Compute first digit of 10*b/d. */
1258 b = multadd(b, 10, 0);
1259 if (b == NULL) {
1260 Bfree(d);
1261 return -1;
1262 }
1263 dig = quorem(b, d);
1264 assert(dig < 10);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001265
1266 /* Compare b/d with s0 */
1267
1268 assert(nd > 0);
1269 dd = 9999; /* silence gcc compiler warning */
1270 for(i = 0; i < nd0; ) {
1271 if ((dd = s0[i++] - '0' - dig))
1272 goto ret;
1273 if (!b->x[0] && b->wds == 1) {
1274 if (i < nd)
1275 dd = 1;
1276 goto ret;
1277 }
1278 b = multadd(b, 10, 0);
1279 if (b == NULL) {
1280 Bfree(d);
1281 return -1;
1282 }
1283 dig = quorem(b,d);
1284 }
1285 for(j = bc->dp1; i++ < nd;) {
1286 if ((dd = s0[j++] - '0' - dig))
1287 goto ret;
1288 if (!b->x[0] && b->wds == 1) {
1289 if (i < nd)
1290 dd = 1;
1291 goto ret;
1292 }
1293 b = multadd(b, 10, 0);
1294 if (b == NULL) {
1295 Bfree(d);
1296 return -1;
1297 }
1298 dig = quorem(b,d);
1299 }
1300 if (b->x[0] || b->wds > 1)
1301 dd = -1;
1302 ret:
1303 Bfree(b);
1304 Bfree(d);
1305 if (speccase) {
1306 if (dd <= 0)
1307 rv->d = 0.;
1308 }
1309 else if (dd < 0) {
1310 if (!dsign) /* does not happen for round-near */
1311 retlow1:
Mark Dickinson81612e82010-01-12 23:04:19 +00001312 dval(rv) -= sulp(rv, bc);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001313 }
1314 else if (dd > 0) {
1315 if (dsign) {
1316 rethi1:
Mark Dickinson81612e82010-01-12 23:04:19 +00001317 dval(rv) += sulp(rv, bc);
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001318 }
1319 }
1320 else {
1321 /* Exact half-way case: apply round-even rule. */
1322 if (word1(rv) & 1) {
1323 if (dsign)
1324 goto rethi1;
1325 goto retlow1;
1326 }
1327 }
1328
1329 return 0;
1330}
1331
1332double
1333_Py_dg_strtod(const char *s00, char **se)
1334{
1335 int bb2, bb5, bbe, bd2, bd5, bbbits, bs2, c, e, e1, error;
1336 int esign, i, j, k, nd, nd0, nf, nz, nz0, sign;
1337 const char *s, *s0, *s1;
1338 double aadj, aadj1;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001339 U aadj2, adj, rv, rv0;
Mark Dickinson81612e82010-01-12 23:04:19 +00001340 ULong y, z, L;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001341 BCinfo bc;
1342 Bigint *bb, *bb1, *bd, *bd0, *bs, *delta;
1343
Mark Dickinson81612e82010-01-12 23:04:19 +00001344 sign = nz0 = nz = bc.dplen = 0;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001345 dval(&rv) = 0.;
1346 for(s = s00;;s++) switch(*s) {
1347 case '-':
1348 sign = 1;
1349 /* no break */
1350 case '+':
1351 if (*++s)
1352 goto break2;
1353 /* no break */
1354 case 0:
1355 goto ret0;
Mark Dickinson725bfd82009-05-03 20:33:40 +00001356 /* modify original dtoa.c so that it doesn't accept leading whitespace
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001357 case '\t':
1358 case '\n':
1359 case '\v':
1360 case '\f':
1361 case '\r':
1362 case ' ':
1363 continue;
Mark Dickinson725bfd82009-05-03 20:33:40 +00001364 */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001365 default:
1366 goto break2;
1367 }
1368 break2:
1369 if (*s == '0') {
1370 nz0 = 1;
1371 while(*++s == '0') ;
1372 if (!*s)
1373 goto ret;
1374 }
1375 s0 = s;
1376 y = z = 0;
1377 for(nd = nf = 0; (c = *s) >= '0' && c <= '9'; nd++, s++)
1378 if (nd < 9)
1379 y = 10*y + c - '0';
1380 else if (nd < 16)
1381 z = 10*z + c - '0';
1382 nd0 = nd;
1383 bc.dp0 = bc.dp1 = s - s0;
1384 if (c == '.') {
1385 c = *++s;
1386 bc.dp1 = s - s0;
1387 bc.dplen = bc.dp1 - bc.dp0;
1388 if (!nd) {
1389 for(; c == '0'; c = *++s)
1390 nz++;
1391 if (c > '0' && c <= '9') {
1392 s0 = s;
1393 nf += nz;
1394 nz = 0;
1395 goto have_dig;
1396 }
1397 goto dig_done;
1398 }
1399 for(; c >= '0' && c <= '9'; c = *++s) {
1400 have_dig:
1401 nz++;
1402 if (c -= '0') {
1403 nf += nz;
1404 for(i = 1; i < nz; i++)
1405 if (nd++ < 9)
1406 y *= 10;
1407 else if (nd <= DBL_DIG + 1)
1408 z *= 10;
1409 if (nd++ < 9)
1410 y = 10*y + c;
1411 else if (nd <= DBL_DIG + 1)
1412 z = 10*z + c;
1413 nz = 0;
1414 }
1415 }
1416 }
1417 dig_done:
1418 e = 0;
1419 if (c == 'e' || c == 'E') {
1420 if (!nd && !nz && !nz0) {
1421 goto ret0;
1422 }
1423 s00 = s;
1424 esign = 0;
1425 switch(c = *++s) {
1426 case '-':
1427 esign = 1;
1428 case '+':
1429 c = *++s;
1430 }
1431 if (c >= '0' && c <= '9') {
1432 while(c == '0')
1433 c = *++s;
1434 if (c > '0' && c <= '9') {
1435 L = c - '0';
1436 s1 = s;
1437 while((c = *++s) >= '0' && c <= '9')
1438 L = 10*L + c - '0';
Mark Dickinson81612e82010-01-12 23:04:19 +00001439 if (s - s1 > 8 || L > MAX_ABS_EXP)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001440 /* Avoid confusion from exponents
1441 * so large that e might overflow.
1442 */
Mark Dickinson81612e82010-01-12 23:04:19 +00001443 e = (int)MAX_ABS_EXP; /* safe for 16 bit ints */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001444 else
1445 e = (int)L;
1446 if (esign)
1447 e = -e;
1448 }
1449 else
1450 e = 0;
1451 }
1452 else
1453 s = s00;
1454 }
1455 if (!nd) {
1456 if (!nz && !nz0) {
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001457 ret0:
1458 s = s00;
1459 sign = 0;
1460 }
1461 goto ret;
1462 }
1463 bc.e0 = e1 = e -= nf;
1464
1465 /* Now we have nd0 digits, starting at s0, followed by a
1466 * decimal point, followed by nd-nd0 digits. The number we're
1467 * after is the integer represented by those digits times
1468 * 10**e */
1469
1470 if (!nd0)
1471 nd0 = nd;
1472 k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1473 dval(&rv) = y;
1474 if (k > 9) {
1475 dval(&rv) = tens[k - 9] * dval(&rv) + z;
1476 }
1477 bd0 = 0;
1478 if (nd <= DBL_DIG
1479 && Flt_Rounds == 1
1480 ) {
1481 if (!e)
1482 goto ret;
1483 if (e > 0) {
1484 if (e <= Ten_pmax) {
1485 dval(&rv) *= tens[e];
1486 goto ret;
1487 }
1488 i = DBL_DIG - nd;
1489 if (e <= Ten_pmax + i) {
1490 /* A fancier test would sometimes let us do
1491 * this for larger i values.
1492 */
1493 e -= i;
1494 dval(&rv) *= tens[i];
1495 dval(&rv) *= tens[e];
1496 goto ret;
1497 }
1498 }
1499 else if (e >= -Ten_pmax) {
1500 dval(&rv) /= tens[-e];
1501 goto ret;
1502 }
1503 }
1504 e1 += nd - k;
1505
1506 bc.scale = 0;
1507
1508 /* Get starting approximation = rv * 10**e1 */
1509
1510 if (e1 > 0) {
1511 if ((i = e1 & 15))
1512 dval(&rv) *= tens[i];
1513 if (e1 &= ~15) {
1514 if (e1 > DBL_MAX_10_EXP) {
1515 ovfl:
1516 errno = ERANGE;
1517 /* Can't trust HUGE_VAL */
1518 word0(&rv) = Exp_mask;
1519 word1(&rv) = 0;
1520 goto ret;
1521 }
1522 e1 >>= 4;
1523 for(j = 0; e1 > 1; j++, e1 >>= 1)
1524 if (e1 & 1)
1525 dval(&rv) *= bigtens[j];
1526 /* The last multiplication could overflow. */
1527 word0(&rv) -= P*Exp_msk1;
1528 dval(&rv) *= bigtens[j];
1529 if ((z = word0(&rv) & Exp_mask)
1530 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1531 goto ovfl;
1532 if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1533 /* set to largest number */
1534 /* (Can't trust DBL_MAX) */
1535 word0(&rv) = Big0;
1536 word1(&rv) = Big1;
1537 }
1538 else
1539 word0(&rv) += P*Exp_msk1;
1540 }
1541 }
1542 else if (e1 < 0) {
1543 e1 = -e1;
1544 if ((i = e1 & 15))
1545 dval(&rv) /= tens[i];
1546 if (e1 >>= 4) {
1547 if (e1 >= 1 << n_bigtens)
1548 goto undfl;
1549 if (e1 & Scale_Bit)
1550 bc.scale = 2*P;
1551 for(j = 0; e1 > 0; j++, e1 >>= 1)
1552 if (e1 & 1)
1553 dval(&rv) *= tinytens[j];
1554 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1555 >> Exp_shift)) > 0) {
1556 /* scaled rv is denormal; clear j low bits */
1557 if (j >= 32) {
1558 word1(&rv) = 0;
1559 if (j >= 53)
1560 word0(&rv) = (P+2)*Exp_msk1;
1561 else
1562 word0(&rv) &= 0xffffffff << (j-32);
1563 }
1564 else
1565 word1(&rv) &= 0xffffffff << j;
1566 }
1567 if (!dval(&rv)) {
1568 undfl:
1569 dval(&rv) = 0.;
1570 errno = ERANGE;
1571 goto ret;
1572 }
1573 }
1574 }
1575
1576 /* Now the hard part -- adjusting rv to the correct value.*/
1577
1578 /* Put digits into bd: true value = bd * 10^e */
1579
1580 bc.nd = nd;
Mark Dickinson81612e82010-01-12 23:04:19 +00001581 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001582 /* to silence an erroneous warning about bc.nd0 */
1583 /* possibly not being initialized. */
Mark Dickinson81612e82010-01-12 23:04:19 +00001584 if (nd > STRTOD_DIGLIM) {
1585 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001586 /* minimum number of decimal digits to distinguish double values */
1587 /* in IEEE arithmetic. */
1588 i = j = 18;
1589 if (i > nd0)
1590 j += bc.dplen;
1591 for(;;) {
1592 if (--j <= bc.dp1 && j >= bc.dp0)
1593 j = bc.dp0 - 1;
1594 if (s0[j] != '0')
1595 break;
1596 --i;
1597 }
1598 e += nd - i;
1599 nd = i;
1600 if (nd0 > nd)
1601 nd0 = nd;
1602 if (nd < 9) { /* must recompute y */
1603 y = 0;
1604 for(i = 0; i < nd0; ++i)
1605 y = 10*y + s0[i] - '0';
1606 for(j = bc.dp1; i < nd; ++i)
1607 y = 10*y + s0[j++] - '0';
1608 }
1609 }
1610 bd0 = s2b(s0, nd0, nd, y, bc.dplen);
1611 if (bd0 == NULL)
1612 goto failed_malloc;
1613
1614 for(;;) {
1615 bd = Balloc(bd0->k);
1616 if (bd == NULL) {
1617 Bfree(bd0);
1618 goto failed_malloc;
1619 }
1620 Bcopy(bd, bd0);
1621 bb = d2b(&rv, &bbe, &bbbits); /* rv = bb * 2^bbe */
1622 if (bb == NULL) {
1623 Bfree(bd);
1624 Bfree(bd0);
1625 goto failed_malloc;
1626 }
1627 bs = i2b(1);
1628 if (bs == NULL) {
1629 Bfree(bb);
1630 Bfree(bd);
1631 Bfree(bd0);
1632 goto failed_malloc;
1633 }
1634
1635 if (e >= 0) {
1636 bb2 = bb5 = 0;
1637 bd2 = bd5 = e;
1638 }
1639 else {
1640 bb2 = bb5 = -e;
1641 bd2 = bd5 = 0;
1642 }
1643 if (bbe >= 0)
1644 bb2 += bbe;
1645 else
1646 bd2 -= bbe;
1647 bs2 = bb2;
1648 j = bbe - bc.scale;
1649 i = j + bbbits - 1; /* logb(rv) */
1650 if (i < Emin) /* denormal */
1651 j += P - Emin;
1652 else
1653 j = P + 1 - bbbits;
1654 bb2 += j;
1655 bd2 += j;
1656 bd2 += bc.scale;
1657 i = bb2 < bd2 ? bb2 : bd2;
1658 if (i > bs2)
1659 i = bs2;
1660 if (i > 0) {
1661 bb2 -= i;
1662 bd2 -= i;
1663 bs2 -= i;
1664 }
1665 if (bb5 > 0) {
1666 bs = pow5mult(bs, bb5);
1667 if (bs == NULL) {
1668 Bfree(bb);
1669 Bfree(bd);
1670 Bfree(bd0);
1671 goto failed_malloc;
1672 }
1673 bb1 = mult(bs, bb);
1674 Bfree(bb);
1675 bb = bb1;
1676 if (bb == NULL) {
1677 Bfree(bs);
1678 Bfree(bd);
1679 Bfree(bd0);
1680 goto failed_malloc;
1681 }
1682 }
1683 if (bb2 > 0) {
1684 bb = lshift(bb, bb2);
1685 if (bb == NULL) {
1686 Bfree(bs);
1687 Bfree(bd);
1688 Bfree(bd0);
1689 goto failed_malloc;
1690 }
1691 }
1692 if (bd5 > 0) {
1693 bd = pow5mult(bd, bd5);
1694 if (bd == NULL) {
1695 Bfree(bb);
1696 Bfree(bs);
1697 Bfree(bd0);
1698 goto failed_malloc;
1699 }
1700 }
1701 if (bd2 > 0) {
1702 bd = lshift(bd, bd2);
1703 if (bd == NULL) {
1704 Bfree(bb);
1705 Bfree(bs);
1706 Bfree(bd0);
1707 goto failed_malloc;
1708 }
1709 }
1710 if (bs2 > 0) {
1711 bs = lshift(bs, bs2);
1712 if (bs == NULL) {
1713 Bfree(bb);
1714 Bfree(bd);
1715 Bfree(bd0);
1716 goto failed_malloc;
1717 }
1718 }
1719 delta = diff(bb, bd);
1720 if (delta == NULL) {
1721 Bfree(bb);
1722 Bfree(bs);
1723 Bfree(bd);
1724 Bfree(bd0);
1725 goto failed_malloc;
1726 }
1727 bc.dsign = delta->sign;
1728 delta->sign = 0;
1729 i = cmp(delta, bs);
1730 if (bc.nd > nd && i <= 0) {
1731 if (bc.dsign)
1732 break; /* Must use bigcomp(). */
1733 {
1734 bc.nd = nd;
1735 i = -1; /* Discarded digits make delta smaller. */
1736 }
1737 }
1738
1739 if (i < 0) {
1740 /* Error is less than half an ulp -- check for
1741 * special case of mantissa a power of two.
1742 */
1743 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask
1744 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1745 ) {
1746 break;
1747 }
1748 if (!delta->x[0] && delta->wds <= 1) {
1749 /* exact result */
1750 break;
1751 }
1752 delta = lshift(delta,Log2P);
1753 if (delta == NULL) {
1754 Bfree(bb);
1755 Bfree(bs);
1756 Bfree(bd);
1757 Bfree(bd0);
1758 goto failed_malloc;
1759 }
1760 if (cmp(delta, bs) > 0)
1761 goto drop_down;
1762 break;
1763 }
1764 if (i == 0) {
1765 /* exactly half-way between */
1766 if (bc.dsign) {
1767 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1768 && word1(&rv) == (
1769 (bc.scale &&
1770 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1771 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
1772 0xffffffff)) {
1773 /*boundary case -- increment exponent*/
1774 word0(&rv) = (word0(&rv) & Exp_mask)
1775 + Exp_msk1
1776 ;
1777 word1(&rv) = 0;
1778 bc.dsign = 0;
1779 break;
1780 }
1781 }
1782 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
1783 drop_down:
1784 /* boundary case -- decrement exponent */
1785 if (bc.scale) {
1786 L = word0(&rv) & Exp_mask;
1787 if (L <= (2*P+1)*Exp_msk1) {
1788 if (L > (P+2)*Exp_msk1)
1789 /* round even ==> */
1790 /* accept rv */
1791 break;
1792 /* rv = smallest denormal */
Mark Dickinson81612e82010-01-12 23:04:19 +00001793 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001794 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001795 goto undfl;
1796 }
1797 }
1798 L = (word0(&rv) & Exp_mask) - Exp_msk1;
1799 word0(&rv) = L | Bndry_mask1;
1800 word1(&rv) = 0xffffffff;
1801 break;
1802 }
1803 if (!(word1(&rv) & LSB))
1804 break;
1805 if (bc.dsign)
1806 dval(&rv) += ulp(&rv);
1807 else {
1808 dval(&rv) -= ulp(&rv);
1809 if (!dval(&rv)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00001810 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001811 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001812 goto undfl;
1813 }
1814 }
1815 bc.dsign = 1 - bc.dsign;
1816 break;
1817 }
1818 if ((aadj = ratio(delta, bs)) <= 2.) {
1819 if (bc.dsign)
1820 aadj = aadj1 = 1.;
1821 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
1822 if (word1(&rv) == Tiny1 && !word0(&rv)) {
Mark Dickinson81612e82010-01-12 23:04:19 +00001823 if (bc.nd >nd)
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001824 break;
Mark Dickinsonb08a53a2009-04-16 19:52:09 +00001825 goto undfl;
1826 }
1827 aadj = 1.;
1828 aadj1 = -1.;
1829 }
1830 else {
1831 /* special case -- power of FLT_RADIX to be */
1832 /* rounded down... */
1833
1834 if (aadj < 2./FLT_RADIX)
1835 aadj = 1./FLT_RADIX;
1836 else
1837 aadj *= 0.5;
1838 aadj1 = -aadj;
1839 }
1840 }
1841 else {
1842 aadj *= 0.5;
1843 aadj1 = bc.dsign ? aadj : -aadj;
1844 if (Flt_Rounds == 0)
1845 aadj1 += 0.5;
1846 }
1847 y = word0(&rv) & Exp_mask;
1848
1849 /* Check for overflow */
1850
1851 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
1852 dval(&rv0) = dval(&rv);
1853 word0(&rv) -= P*Exp_msk1;
1854 adj.d = aadj1 * ulp(&rv);
1855 dval(&rv) += adj.d;
1856 if ((word0(&rv) & Exp_mask) >=
1857 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
1858 if (word0(&rv0) == Big0 && word1(&rv0) == Big1)
1859 goto ovfl;
1860 word0(&rv) = Big0;
1861 word1(&rv) = Big1;
1862 goto cont;
1863 }
1864 else
1865 word0(&rv) += P*Exp_msk1;
1866 }
1867 else {
1868 if (bc.scale && y <= 2*P*Exp_msk1) {
1869 if (aadj <= 0x7fffffff) {
1870 if ((z = (ULong)aadj) <= 0)
1871 z = 1;
1872 aadj = z;
1873 aadj1 = bc.dsign ? aadj : -aadj;
1874 }
1875 dval(&aadj2) = aadj1;
1876 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
1877 aadj1 = dval(&aadj2);
1878 }
1879 adj.d = aadj1 * ulp(&rv);
1880 dval(&rv) += adj.d;
1881 }
1882 z = word0(&rv) & Exp_mask;
1883 if (bc.nd == nd) {
1884 if (!bc.scale)
1885 if (y == z) {
1886 /* Can we stop now? */
1887 L = (Long)aadj;
1888 aadj -= L;
1889 /* The tolerances below are conservative. */
1890 if (bc.dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
1891 if (aadj < .4999999 || aadj > .5000001)
1892 break;
1893 }
1894 else if (aadj < .4999999/FLT_RADIX)
1895 break;
1896 }
1897 }
1898 cont:
1899 Bfree(bb);
1900 Bfree(bd);
1901 Bfree(bs);
1902 Bfree(delta);
1903 }
1904 Bfree(bb);
1905 Bfree(bd);
1906 Bfree(bs);
1907 Bfree(bd0);
1908 Bfree(delta);
1909 if (bc.nd > nd) {
1910 error = bigcomp(&rv, s0, &bc);
1911 if (error)
1912 goto failed_malloc;
1913 }
1914
1915 if (bc.scale) {
1916 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
1917 word1(&rv0) = 0;
1918 dval(&rv) *= dval(&rv0);
1919 /* try to avoid the bug of testing an 8087 register value */
1920 if (!(word0(&rv) & Exp_mask))
1921 errno = ERANGE;
1922 }
1923 ret:
1924 if (se)
1925 *se = (char *)s;
1926 return sign ? -dval(&rv) : dval(&rv);
1927
1928 failed_malloc:
1929 if (se)
1930 *se = (char *)s00;
1931 errno = ENOMEM;
1932 return -1.0;
1933}
1934
1935static char *
1936rv_alloc(int i)
1937{
1938 int j, k, *r;
1939
1940 j = sizeof(ULong);
1941 for(k = 0;
1942 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
1943 j <<= 1)
1944 k++;
1945 r = (int*)Balloc(k);
1946 if (r == NULL)
1947 return NULL;
1948 *r = k;
1949 return (char *)(r+1);
1950}
1951
1952static char *
1953nrv_alloc(char *s, char **rve, int n)
1954{
1955 char *rv, *t;
1956
1957 rv = rv_alloc(n);
1958 if (rv == NULL)
1959 return NULL;
1960 t = rv;
1961 while((*t = *s++)) t++;
1962 if (rve)
1963 *rve = t;
1964 return rv;
1965}
1966
1967/* freedtoa(s) must be used to free values s returned by dtoa
1968 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
1969 * but for consistency with earlier versions of dtoa, it is optional
1970 * when MULTIPLE_THREADS is not defined.
1971 */
1972
1973void
1974_Py_dg_freedtoa(char *s)
1975{
1976 Bigint *b = (Bigint *)((int *)s - 1);
1977 b->maxwds = 1 << (b->k = *(int*)b);
1978 Bfree(b);
1979}
1980
1981/* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
1982 *
1983 * Inspired by "How to Print Floating-Point Numbers Accurately" by
1984 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
1985 *
1986 * Modifications:
1987 * 1. Rather than iterating, we use a simple numeric overestimate
1988 * to determine k = floor(log10(d)). We scale relevant
1989 * quantities using O(log2(k)) rather than O(k) multiplications.
1990 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
1991 * try to generate digits strictly left to right. Instead, we
1992 * compute with fewer bits and propagate the carry if necessary
1993 * when rounding the final digit up. This is often faster.
1994 * 3. Under the assumption that input will be rounded nearest,
1995 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
1996 * That is, we allow equality in stopping tests when the
1997 * round-nearest rule will give the same floating-point value
1998 * as would satisfaction of the stopping test with strict
1999 * inequality.
2000 * 4. We remove common factors of powers of 2 from relevant
2001 * quantities.
2002 * 5. When converting floating-point integers less than 1e16,
2003 * we use floating-point arithmetic rather than resorting
2004 * to multiple-precision integers.
2005 * 6. When asked to produce fewer than 15 digits, we first try
2006 * to get by with floating-point arithmetic; we resort to
2007 * multiple-precision integer arithmetic only if we cannot
2008 * guarantee that the floating-point calculation has given
2009 * the correctly rounded result. For k requested digits and
2010 * "uniformly" distributed input, the probability is
2011 * something like 10^(k-15) that we must resort to the Long
2012 * calculation.
2013 */
2014
2015/* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2016 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2017 call to _Py_dg_freedtoa. */
2018
2019char *
2020_Py_dg_dtoa(double dd, int mode, int ndigits,
2021 int *decpt, int *sign, char **rve)
2022{
2023 /* Arguments ndigits, decpt, sign are similar to those
2024 of ecvt and fcvt; trailing zeros are suppressed from
2025 the returned string. If not null, *rve is set to point
2026 to the end of the return value. If d is +-Infinity or NaN,
2027 then *decpt is set to 9999.
2028
2029 mode:
2030 0 ==> shortest string that yields d when read in
2031 and rounded to nearest.
2032 1 ==> like 0, but with Steele & White stopping rule;
2033 e.g. with IEEE P754 arithmetic , mode 0 gives
2034 1e23 whereas mode 1 gives 9.999999999999999e22.
2035 2 ==> max(1,ndigits) significant digits. This gives a
2036 return value similar to that of ecvt, except
2037 that trailing zeros are suppressed.
2038 3 ==> through ndigits past the decimal point. This
2039 gives a return value similar to that from fcvt,
2040 except that trailing zeros are suppressed, and
2041 ndigits can be negative.
2042 4,5 ==> similar to 2 and 3, respectively, but (in
2043 round-nearest mode) with the tests of mode 0 to
2044 possibly return a shorter string that rounds to d.
2045 With IEEE arithmetic and compilation with
2046 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2047 as modes 2 and 3 when FLT_ROUNDS != 1.
2048 6-9 ==> Debugging modes similar to mode - 4: don't try
2049 fast floating-point estimate (if applicable).
2050
2051 Values of mode other than 0-9 are treated as mode 0.
2052
2053 Sufficient space is allocated to the return value
2054 to hold the suppressed trailing zeros.
2055 */
2056
2057 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2058 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2059 spec_case, try_quick;
2060 Long L;
2061 int denorm;
2062 ULong x;
2063 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2064 U d2, eps, u;
2065 double ds;
2066 char *s, *s0;
2067
2068 /* set pointers to NULL, to silence gcc compiler warnings and make
2069 cleanup easier on error */
2070 mlo = mhi = b = S = 0;
2071 s0 = 0;
2072
2073 u.d = dd;
2074 if (word0(&u) & Sign_bit) {
2075 /* set sign for everything, including 0's and NaNs */
2076 *sign = 1;
2077 word0(&u) &= ~Sign_bit; /* clear sign bit */
2078 }
2079 else
2080 *sign = 0;
2081
2082 /* quick return for Infinities, NaNs and zeros */
2083 if ((word0(&u) & Exp_mask) == Exp_mask)
2084 {
2085 /* Infinity or NaN */
2086 *decpt = 9999;
2087 if (!word1(&u) && !(word0(&u) & 0xfffff))
2088 return nrv_alloc("Infinity", rve, 8);
2089 return nrv_alloc("NaN", rve, 3);
2090 }
2091 if (!dval(&u)) {
2092 *decpt = 1;
2093 return nrv_alloc("0", rve, 1);
2094 }
2095
2096 /* compute k = floor(log10(d)). The computation may leave k
2097 one too large, but should never leave k too small. */
2098 b = d2b(&u, &be, &bbits);
2099 if (b == NULL)
2100 goto failed_malloc;
2101 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2102 dval(&d2) = dval(&u);
2103 word0(&d2) &= Frac_mask1;
2104 word0(&d2) |= Exp_11;
2105
2106 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2107 * log10(x) = log(x) / log(10)
2108 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2109 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2110 *
2111 * This suggests computing an approximation k to log10(d) by
2112 *
2113 * k = (i - Bias)*0.301029995663981
2114 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2115 *
2116 * We want k to be too large rather than too small.
2117 * The error in the first-order Taylor series approximation
2118 * is in our favor, so we just round up the constant enough
2119 * to compensate for any error in the multiplication of
2120 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2121 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2122 * adding 1e-13 to the constant term more than suffices.
2123 * Hence we adjust the constant term to 0.1760912590558.
2124 * (We could get a more accurate k by invoking log10,
2125 * but this is probably not worthwhile.)
2126 */
2127
2128 i -= Bias;
2129 denorm = 0;
2130 }
2131 else {
2132 /* d is denormalized */
2133
2134 i = bbits + be + (Bias + (P-1) - 1);
2135 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2136 : word1(&u) << (32 - i);
2137 dval(&d2) = x;
2138 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2139 i -= (Bias + (P-1) - 1) + 1;
2140 denorm = 1;
2141 }
2142 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2143 i*0.301029995663981;
2144 k = (int)ds;
2145 if (ds < 0. && ds != k)
2146 k--; /* want k = floor(ds) */
2147 k_check = 1;
2148 if (k >= 0 && k <= Ten_pmax) {
2149 if (dval(&u) < tens[k])
2150 k--;
2151 k_check = 0;
2152 }
2153 j = bbits - i - 1;
2154 if (j >= 0) {
2155 b2 = 0;
2156 s2 = j;
2157 }
2158 else {
2159 b2 = -j;
2160 s2 = 0;
2161 }
2162 if (k >= 0) {
2163 b5 = 0;
2164 s5 = k;
2165 s2 += k;
2166 }
2167 else {
2168 b2 -= k;
2169 b5 = -k;
2170 s5 = 0;
2171 }
2172 if (mode < 0 || mode > 9)
2173 mode = 0;
2174
2175 try_quick = 1;
2176
2177 if (mode > 5) {
2178 mode -= 4;
2179 try_quick = 0;
2180 }
2181 leftright = 1;
2182 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2183 /* silence erroneous "gcc -Wall" warning. */
2184 switch(mode) {
2185 case 0:
2186 case 1:
2187 i = 18;
2188 ndigits = 0;
2189 break;
2190 case 2:
2191 leftright = 0;
2192 /* no break */
2193 case 4:
2194 if (ndigits <= 0)
2195 ndigits = 1;
2196 ilim = ilim1 = i = ndigits;
2197 break;
2198 case 3:
2199 leftright = 0;
2200 /* no break */
2201 case 5:
2202 i = ndigits + k + 1;
2203 ilim = i;
2204 ilim1 = i - 1;
2205 if (i <= 0)
2206 i = 1;
2207 }
2208 s0 = rv_alloc(i);
2209 if (s0 == NULL)
2210 goto failed_malloc;
2211 s = s0;
2212
2213
2214 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2215
2216 /* Try to get by with floating-point arithmetic. */
2217
2218 i = 0;
2219 dval(&d2) = dval(&u);
2220 k0 = k;
2221 ilim0 = ilim;
2222 ieps = 2; /* conservative */
2223 if (k > 0) {
2224 ds = tens[k&0xf];
2225 j = k >> 4;
2226 if (j & Bletch) {
2227 /* prevent overflows */
2228 j &= Bletch - 1;
2229 dval(&u) /= bigtens[n_bigtens-1];
2230 ieps++;
2231 }
2232 for(; j; j >>= 1, i++)
2233 if (j & 1) {
2234 ieps++;
2235 ds *= bigtens[i];
2236 }
2237 dval(&u) /= ds;
2238 }
2239 else if ((j1 = -k)) {
2240 dval(&u) *= tens[j1 & 0xf];
2241 for(j = j1 >> 4; j; j >>= 1, i++)
2242 if (j & 1) {
2243 ieps++;
2244 dval(&u) *= bigtens[i];
2245 }
2246 }
2247 if (k_check && dval(&u) < 1. && ilim > 0) {
2248 if (ilim1 <= 0)
2249 goto fast_failed;
2250 ilim = ilim1;
2251 k--;
2252 dval(&u) *= 10.;
2253 ieps++;
2254 }
2255 dval(&eps) = ieps*dval(&u) + 7.;
2256 word0(&eps) -= (P-1)*Exp_msk1;
2257 if (ilim == 0) {
2258 S = mhi = 0;
2259 dval(&u) -= 5.;
2260 if (dval(&u) > dval(&eps))
2261 goto one_digit;
2262 if (dval(&u) < -dval(&eps))
2263 goto no_digits;
2264 goto fast_failed;
2265 }
2266 if (leftright) {
2267 /* Use Steele & White method of only
2268 * generating digits needed.
2269 */
2270 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2271 for(i = 0;;) {
2272 L = (Long)dval(&u);
2273 dval(&u) -= L;
2274 *s++ = '0' + (int)L;
2275 if (dval(&u) < dval(&eps))
2276 goto ret1;
2277 if (1. - dval(&u) < dval(&eps))
2278 goto bump_up;
2279 if (++i >= ilim)
2280 break;
2281 dval(&eps) *= 10.;
2282 dval(&u) *= 10.;
2283 }
2284 }
2285 else {
2286 /* Generate ilim digits, then fix them up. */
2287 dval(&eps) *= tens[ilim-1];
2288 for(i = 1;; i++, dval(&u) *= 10.) {
2289 L = (Long)(dval(&u));
2290 if (!(dval(&u) -= L))
2291 ilim = i;
2292 *s++ = '0' + (int)L;
2293 if (i == ilim) {
2294 if (dval(&u) > 0.5 + dval(&eps))
2295 goto bump_up;
2296 else if (dval(&u) < 0.5 - dval(&eps)) {
2297 while(*--s == '0');
2298 s++;
2299 goto ret1;
2300 }
2301 break;
2302 }
2303 }
2304 }
2305 fast_failed:
2306 s = s0;
2307 dval(&u) = dval(&d2);
2308 k = k0;
2309 ilim = ilim0;
2310 }
2311
2312 /* Do we have a "small" integer? */
2313
2314 if (be >= 0 && k <= Int_max) {
2315 /* Yes. */
2316 ds = tens[k];
2317 if (ndigits < 0 && ilim <= 0) {
2318 S = mhi = 0;
2319 if (ilim < 0 || dval(&u) <= 5*ds)
2320 goto no_digits;
2321 goto one_digit;
2322 }
2323 for(i = 1;; i++, dval(&u) *= 10.) {
2324 L = (Long)(dval(&u) / ds);
2325 dval(&u) -= L*ds;
2326 *s++ = '0' + (int)L;
2327 if (!dval(&u)) {
2328 break;
2329 }
2330 if (i == ilim) {
2331 dval(&u) += dval(&u);
2332 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2333 bump_up:
2334 while(*--s == '9')
2335 if (s == s0) {
2336 k++;
2337 *s = '0';
2338 break;
2339 }
2340 ++*s++;
2341 }
2342 break;
2343 }
2344 }
2345 goto ret1;
2346 }
2347
2348 m2 = b2;
2349 m5 = b5;
2350 if (leftright) {
2351 i =
2352 denorm ? be + (Bias + (P-1) - 1 + 1) :
2353 1 + P - bbits;
2354 b2 += i;
2355 s2 += i;
2356 mhi = i2b(1);
2357 if (mhi == NULL)
2358 goto failed_malloc;
2359 }
2360 if (m2 > 0 && s2 > 0) {
2361 i = m2 < s2 ? m2 : s2;
2362 b2 -= i;
2363 m2 -= i;
2364 s2 -= i;
2365 }
2366 if (b5 > 0) {
2367 if (leftright) {
2368 if (m5 > 0) {
2369 mhi = pow5mult(mhi, m5);
2370 if (mhi == NULL)
2371 goto failed_malloc;
2372 b1 = mult(mhi, b);
2373 Bfree(b);
2374 b = b1;
2375 if (b == NULL)
2376 goto failed_malloc;
2377 }
2378 if ((j = b5 - m5)) {
2379 b = pow5mult(b, j);
2380 if (b == NULL)
2381 goto failed_malloc;
2382 }
2383 }
2384 else {
2385 b = pow5mult(b, b5);
2386 if (b == NULL)
2387 goto failed_malloc;
2388 }
2389 }
2390 S = i2b(1);
2391 if (S == NULL)
2392 goto failed_malloc;
2393 if (s5 > 0) {
2394 S = pow5mult(S, s5);
2395 if (S == NULL)
2396 goto failed_malloc;
2397 }
2398
2399 /* Check for special case that d is a normalized power of 2. */
2400
2401 spec_case = 0;
2402 if ((mode < 2 || leftright)
2403 ) {
2404 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2405 && word0(&u) & (Exp_mask & ~Exp_msk1)
2406 ) {
2407 /* The special case */
2408 b2 += Log2P;
2409 s2 += Log2P;
2410 spec_case = 1;
2411 }
2412 }
2413
2414 /* Arrange for convenient computation of quotients:
2415 * shift left if necessary so divisor has 4 leading 0 bits.
2416 *
2417 * Perhaps we should just compute leading 28 bits of S once
2418 * and for all and pass them and a shift to quorem, so it
2419 * can do shifts and ors to compute the numerator for q.
2420 */
2421 if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f))
2422 i = 32 - i;
2423#define iInc 28
2424 i = dshift(S, s2);
2425 b2 += i;
2426 m2 += i;
2427 s2 += i;
2428 if (b2 > 0) {
2429 b = lshift(b, b2);
2430 if (b == NULL)
2431 goto failed_malloc;
2432 }
2433 if (s2 > 0) {
2434 S = lshift(S, s2);
2435 if (S == NULL)
2436 goto failed_malloc;
2437 }
2438 if (k_check) {
2439 if (cmp(b,S) < 0) {
2440 k--;
2441 b = multadd(b, 10, 0); /* we botched the k estimate */
2442 if (b == NULL)
2443 goto failed_malloc;
2444 if (leftright) {
2445 mhi = multadd(mhi, 10, 0);
2446 if (mhi == NULL)
2447 goto failed_malloc;
2448 }
2449 ilim = ilim1;
2450 }
2451 }
2452 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2453 if (ilim < 0) {
2454 /* no digits, fcvt style */
2455 no_digits:
2456 k = -1 - ndigits;
2457 goto ret;
2458 }
2459 else {
2460 S = multadd(S, 5, 0);
2461 if (S == NULL)
2462 goto failed_malloc;
2463 if (cmp(b, S) <= 0)
2464 goto no_digits;
2465 }
2466 one_digit:
2467 *s++ = '1';
2468 k++;
2469 goto ret;
2470 }
2471 if (leftright) {
2472 if (m2 > 0) {
2473 mhi = lshift(mhi, m2);
2474 if (mhi == NULL)
2475 goto failed_malloc;
2476 }
2477
2478 /* Compute mlo -- check for special case
2479 * that d is a normalized power of 2.
2480 */
2481
2482 mlo = mhi;
2483 if (spec_case) {
2484 mhi = Balloc(mhi->k);
2485 if (mhi == NULL)
2486 goto failed_malloc;
2487 Bcopy(mhi, mlo);
2488 mhi = lshift(mhi, Log2P);
2489 if (mhi == NULL)
2490 goto failed_malloc;
2491 }
2492
2493 for(i = 1;;i++) {
2494 dig = quorem(b,S) + '0';
2495 /* Do we yet have the shortest decimal string
2496 * that will round to d?
2497 */
2498 j = cmp(b, mlo);
2499 delta = diff(S, mhi);
2500 if (delta == NULL)
2501 goto failed_malloc;
2502 j1 = delta->sign ? 1 : cmp(b, delta);
2503 Bfree(delta);
2504 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2505 ) {
2506 if (dig == '9')
2507 goto round_9_up;
2508 if (j > 0)
2509 dig++;
2510 *s++ = dig;
2511 goto ret;
2512 }
2513 if (j < 0 || (j == 0 && mode != 1
2514 && !(word1(&u) & 1)
2515 )) {
2516 if (!b->x[0] && b->wds <= 1) {
2517 goto accept_dig;
2518 }
2519 if (j1 > 0) {
2520 b = lshift(b, 1);
2521 if (b == NULL)
2522 goto failed_malloc;
2523 j1 = cmp(b, S);
2524 if ((j1 > 0 || (j1 == 0 && dig & 1))
2525 && dig++ == '9')
2526 goto round_9_up;
2527 }
2528 accept_dig:
2529 *s++ = dig;
2530 goto ret;
2531 }
2532 if (j1 > 0) {
2533 if (dig == '9') { /* possible if i == 1 */
2534 round_9_up:
2535 *s++ = '9';
2536 goto roundoff;
2537 }
2538 *s++ = dig + 1;
2539 goto ret;
2540 }
2541 *s++ = dig;
2542 if (i == ilim)
2543 break;
2544 b = multadd(b, 10, 0);
2545 if (b == NULL)
2546 goto failed_malloc;
2547 if (mlo == mhi) {
2548 mlo = mhi = multadd(mhi, 10, 0);
2549 if (mlo == NULL)
2550 goto failed_malloc;
2551 }
2552 else {
2553 mlo = multadd(mlo, 10, 0);
2554 if (mlo == NULL)
2555 goto failed_malloc;
2556 mhi = multadd(mhi, 10, 0);
2557 if (mhi == NULL)
2558 goto failed_malloc;
2559 }
2560 }
2561 }
2562 else
2563 for(i = 1;; i++) {
2564 *s++ = dig = quorem(b,S) + '0';
2565 if (!b->x[0] && b->wds <= 1) {
2566 goto ret;
2567 }
2568 if (i >= ilim)
2569 break;
2570 b = multadd(b, 10, 0);
2571 if (b == NULL)
2572 goto failed_malloc;
2573 }
2574
2575 /* Round off last digit */
2576
2577 b = lshift(b, 1);
2578 if (b == NULL)
2579 goto failed_malloc;
2580 j = cmp(b, S);
2581 if (j > 0 || (j == 0 && dig & 1)) {
2582 roundoff:
2583 while(*--s == '9')
2584 if (s == s0) {
2585 k++;
2586 *s++ = '1';
2587 goto ret;
2588 }
2589 ++*s++;
2590 }
2591 else {
2592 while(*--s == '0');
2593 s++;
2594 }
2595 ret:
2596 Bfree(S);
2597 if (mhi) {
2598 if (mlo && mlo != mhi)
2599 Bfree(mlo);
2600 Bfree(mhi);
2601 }
2602 ret1:
2603 Bfree(b);
2604 *s = 0;
2605 *decpt = k + 1;
2606 if (rve)
2607 *rve = s;
2608 return s0;
2609 failed_malloc:
2610 if (S)
2611 Bfree(S);
2612 if (mlo && mlo != mhi)
2613 Bfree(mlo);
2614 if (mhi)
2615 Bfree(mhi);
2616 if (b)
2617 Bfree(b);
2618 if (s0)
2619 _Py_dg_freedtoa(s0);
2620 return NULL;
2621}
2622#ifdef __cplusplus
2623}
2624#endif
2625
2626#endif /* PY_NO_SHORT_FLOAT_REPR */