1 /****************************************************************
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 * 8. A corner case where _Py_dg_dtoa didn't strip trailing zeros has been
68 * fixed. (bugs.python.org/issue40780)
69 *
70 ***************************************************************/
71
72 /* Please send bug reports for the original dtoa.c code to David M. Gay (dmg
73 * at acm dot org, with " at " changed at "@" and " dot " changed to ".").
74 * Please report bugs for this modified version using the Python issue tracker
75 * (http://bugs.python.org). */
76
77 /* On a machine with IEEE extended-precision registers, it is
78 * necessary to specify double-precision (53-bit) rounding precision
79 * before invoking strtod or dtoa. If the machine uses (the equivalent
80 * of) Intel 80x87 arithmetic, the call
81 * _control87(PC_53, MCW_PC);
82 * does this with many compilers. Whether this or another call is
83 * appropriate depends on the compiler; for this to work, it may be
84 * necessary to #include "float.h" or another system-dependent header
85 * file.
86 */
87
88 /* strtod for IEEE-, VAX-, and IBM-arithmetic machines.
89 *
90 * This strtod returns a nearest machine number to the input decimal
91 * string (or sets errno to ERANGE). With IEEE arithmetic, ties are
92 * broken by the IEEE round-even rule. Otherwise ties are broken by
93 * biased rounding (add half and chop).
94 *
95 * Inspired loosely by William D. Clinger's paper "How to Read Floating
96 * Point Numbers Accurately" [Proc. ACM SIGPLAN '90, pp. 92-101].
97 *
98 * Modifications:
99 *
100 * 1. We only require IEEE, IBM, or VAX double-precision
101 * arithmetic (not IEEE double-extended).
102 * 2. We get by with floating-point arithmetic in a case that
103 * Clinger missed -- when we're computing d * 10^n
104 * for a small integer d and the integer n is not too
105 * much larger than 22 (the maximum integer k for which
106 * we can represent 10^k exactly), we may be able to
107 * compute (d*10^k) * 10^(e-k) with just one roundoff.
108 * 3. Rather than a bit-at-a-time adjustment of the binary
109 * result in the hard case, we use floating-point
110 * arithmetic to determine the adjustment to within
111 * one bit; only in really hard cases do we need to
112 * compute a second residual.
113 * 4. Because of 3., we don't need a large table of powers of 10
114 * for ten-to-e (just some small tables, e.g. of 10^k
115 * for 0 <= k <= 22).
116 */
117
118 /* Linking of Python's #defines to Gay's #defines starts here. */
119
120 #include "Python.h"
121 #include "pycore_dtoa.h" // _PY_SHORT_FLOAT_REPR
122 #include <stdlib.h> // exit()
123
124 /* if _PY_SHORT_FLOAT_REPR == 0, then don't even try to compile
125 the following code */
126 #if _PY_SHORT_FLOAT_REPR == 1
127
128 #include "float.h"
129
130 #define MALLOC PyMem_Malloc
131 #define FREE PyMem_Free
132
133 /* This code should also work for ARM mixed-endian format on little-endian
134 machines, where doubles have byte order 45670123 (in increasing address
135 order, 0 being the least significant byte). */
136 #ifdef DOUBLE_IS_LITTLE_ENDIAN_IEEE754
137 # define IEEE_8087
138 #endif
139 #if defined(DOUBLE_IS_BIG_ENDIAN_IEEE754) || \
140 defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754)
141 # define IEEE_MC68k
142 #endif
143 #if defined(IEEE_8087) + defined(IEEE_MC68k) != 1
144 #error "Exactly one of IEEE_8087 or IEEE_MC68k should be defined."
145 #endif
146
147 /* The code below assumes that the endianness of integers matches the
148 endianness of the two 32-bit words of a double. Check this. */
149 #if defined(WORDS_BIGENDIAN) && (defined(DOUBLE_IS_LITTLE_ENDIAN_IEEE754) || \
150 defined(DOUBLE_IS_ARM_MIXED_ENDIAN_IEEE754))
151 #error "doubles and ints have incompatible endianness"
152 #endif
153
154 #if !defined(WORDS_BIGENDIAN) && defined(DOUBLE_IS_BIG_ENDIAN_IEEE754)
155 #error "doubles and ints have incompatible endianness"
156 #endif
157
158
159 typedef uint32_t ULong;
160 typedef int32_t Long;
161 typedef uint64_t ULLong;
162
163 #undef DEBUG
164 #ifdef Py_DEBUG
165 #define DEBUG
166 #endif
167
168 /* End Python #define linking */
169
170 #ifdef DEBUG
171 #define Bug(x) {fprintf(stderr, "%s\n", x); exit(1);}
172 #endif
173
174 #ifndef PRIVATE_MEM
175 #define PRIVATE_MEM 2304
176 #endif
177 #define PRIVATE_mem ((PRIVATE_MEM+sizeof(double)-1)/sizeof(double))
178 static double private_mem[PRIVATE_mem], *pmem_next = private_mem;
179
180 #ifdef __cplusplus
181 extern "C" {
182 #endif
183
184 typedef union { double d; ULong L[2]; } U;
185
186 #ifdef IEEE_8087
187 #define word0(x) (x)->L[1]
188 #define word1(x) (x)->L[0]
189 #else
190 #define word0(x) (x)->L[0]
191 #define word1(x) (x)->L[1]
192 #endif
193 #define dval(x) (x)->d
194
195 #ifndef STRTOD_DIGLIM
196 #define STRTOD_DIGLIM 40
197 #endif
198
199 /* maximum permitted exponent value for strtod; exponents larger than
200 MAX_ABS_EXP in absolute value get truncated to +-MAX_ABS_EXP. MAX_ABS_EXP
201 should fit into an int. */
202 #ifndef MAX_ABS_EXP
203 #define MAX_ABS_EXP 1100000000U
204 #endif
205 /* Bound on length of pieces of input strings in _Py_dg_strtod; specifically,
206 this is used to bound the total number of digits ignoring leading zeros and
207 the number of digits that follow the decimal point. Ideally, MAX_DIGITS
208 should satisfy MAX_DIGITS + 400 < MAX_ABS_EXP; that ensures that the
209 exponent clipping in _Py_dg_strtod can't affect the value of the output. */
210 #ifndef MAX_DIGITS
211 #define MAX_DIGITS 1000000000U
212 #endif
213
214 /* Guard against trying to use the above values on unusual platforms with ints
215 * of width less than 32 bits. */
216 #if MAX_ABS_EXP > INT_MAX
217 #error "MAX_ABS_EXP should fit in an int"
218 #endif
219 #if MAX_DIGITS > INT_MAX
220 #error "MAX_DIGITS should fit in an int"
221 #endif
222
223 /* The following definition of Storeinc is appropriate for MIPS processors.
224 * An alternative that might be better on some machines is
225 * #define Storeinc(a,b,c) (*a++ = b << 16 | c & 0xffff)
226 */
227 #if defined(IEEE_8087)
228 #define Storeinc(a,b,c) (((unsigned short *)a)[1] = (unsigned short)b, \
229 ((unsigned short *)a)[0] = (unsigned short)c, a++)
230 #else
231 #define Storeinc(a,b,c) (((unsigned short *)a)[0] = (unsigned short)b, \
232 ((unsigned short *)a)[1] = (unsigned short)c, a++)
233 #endif
234
235 /* #define P DBL_MANT_DIG */
236 /* Ten_pmax = floor(P*log(2)/log(5)) */
237 /* Bletch = (highest power of 2 < DBL_MAX_10_EXP) / 16 */
238 /* Quick_max = floor((P-1)*log(FLT_RADIX)/log(10) - 1) */
239 /* Int_max = floor(P*log(FLT_RADIX)/log(10) - 1) */
240
241 #define Exp_shift 20
242 #define Exp_shift1 20
243 #define Exp_msk1 0x100000
244 #define Exp_msk11 0x100000
245 #define Exp_mask 0x7ff00000
246 #define P 53
247 #define Nbits 53
248 #define Bias 1023
249 #define Emax 1023
250 #define Emin (-1022)
251 #define Etiny (-1074) /* smallest denormal is 2**Etiny */
252 #define Exp_1 0x3ff00000
253 #define Exp_11 0x3ff00000
254 #define Ebits 11
255 #define Frac_mask 0xfffff
256 #define Frac_mask1 0xfffff
257 #define Ten_pmax 22
258 #define Bletch 0x10
259 #define Bndry_mask 0xfffff
260 #define Bndry_mask1 0xfffff
261 #define Sign_bit 0x80000000
262 #define Log2P 1
263 #define Tiny0 0
264 #define Tiny1 1
265 #define Quick_max 14
266 #define Int_max 14
267
268 #ifndef Flt_Rounds
269 #ifdef FLT_ROUNDS
270 #define Flt_Rounds FLT_ROUNDS
271 #else
272 #define Flt_Rounds 1
273 #endif
274 #endif /*Flt_Rounds*/
275
276 #define Rounding Flt_Rounds
277
278 #define Big0 (Frac_mask1 | Exp_msk1*(DBL_MAX_EXP+Bias-1))
279 #define Big1 0xffffffff
280
281 /* Standard NaN used by _Py_dg_stdnan. */
282
283 #define NAN_WORD0 0x7ff80000
284 #define NAN_WORD1 0
285
286 /* Bits of the representation of positive infinity. */
287
288 #define POSINF_WORD0 0x7ff00000
289 #define POSINF_WORD1 0
290
291 /* struct BCinfo is used to pass information from _Py_dg_strtod to bigcomp */
292
293 typedef struct BCinfo BCinfo;
294 struct
295 BCinfo {
296 int e0, nd, nd0, scale;
297 };
298
299 #define FFFFFFFF 0xffffffffUL
300
301 #define Kmax 7
302
303 /* struct Bigint is used to represent arbitrary-precision integers. These
304 integers are stored in sign-magnitude format, with the magnitude stored as
305 an array of base 2**32 digits. Bigints are always normalized: if x is a
306 Bigint then x->wds >= 1, and either x->wds == 1 or x[wds-1] is nonzero.
307
308 The Bigint fields are as follows:
309
310 - next is a header used by Balloc and Bfree to keep track of lists
311 of freed Bigints; it's also used for the linked list of
312 powers of 5 of the form 5**2**i used by pow5mult.
313 - k indicates which pool this Bigint was allocated from
314 - maxwds is the maximum number of words space was allocated for
315 (usually maxwds == 2**k)
316 - sign is 1 for negative Bigints, 0 for positive. The sign is unused
317 (ignored on inputs, set to 0 on outputs) in almost all operations
318 involving Bigints: a notable exception is the diff function, which
319 ignores signs on inputs but sets the sign of the output correctly.
320 - wds is the actual number of significant words
321 - x contains the vector of words (digits) for this Bigint, from least
322 significant (x[0]) to most significant (x[wds-1]).
323 */
324
325 struct
326 Bigint {
327 struct Bigint *next;
328 int k, maxwds, sign, wds;
329 ULong x[1];
330 };
331
332 typedef struct Bigint Bigint;
333
334 #ifndef Py_USING_MEMORY_DEBUGGER
335
336 /* Memory management: memory is allocated from, and returned to, Kmax+1 pools
337 of memory, where pool k (0 <= k <= Kmax) is for Bigints b with b->maxwds ==
338 1 << k. These pools are maintained as linked lists, with freelist[k]
339 pointing to the head of the list for pool k.
340
341 On allocation, if there's no free slot in the appropriate pool, MALLOC is
342 called to get more memory. This memory is not returned to the system until
343 Python quits. There's also a private memory pool that's allocated from
344 in preference to using MALLOC.
345
346 For Bigints with more than (1 << Kmax) digits (which implies at least 1233
347 decimal digits), memory is directly allocated using MALLOC, and freed using
348 FREE.
349
350 XXX: it would be easy to bypass this memory-management system and
351 translate each call to Balloc into a call to PyMem_Malloc, and each
352 Bfree to PyMem_Free. Investigate whether this has any significant
353 performance on impact. */
354
355 static Bigint *freelist[Kmax+1];
356
357 /* Allocate space for a Bigint with up to 1<<k digits */
358
359 static Bigint *
Balloc(int k)360 Balloc(int k)
361 {
362 int x;
363 Bigint *rv;
364 unsigned int len;
365
366 if (k <= Kmax && (rv = freelist[k]))
367 freelist[k] = rv->next;
368 else {
369 x = 1 << k;
370 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
371 /sizeof(double);
372 if (k <= Kmax && pmem_next - private_mem + len <= (Py_ssize_t)PRIVATE_mem) {
373 rv = (Bigint*)pmem_next;
374 pmem_next += len;
375 }
376 else {
377 rv = (Bigint*)MALLOC(len*sizeof(double));
378 if (rv == NULL)
379 return NULL;
380 }
381 rv->k = k;
382 rv->maxwds = x;
383 }
384 rv->sign = rv->wds = 0;
385 return rv;
386 }
387
388 /* Free a Bigint allocated with Balloc */
389
390 static void
Bfree(Bigint * v)391 Bfree(Bigint *v)
392 {
393 if (v) {
394 if (v->k > Kmax)
395 FREE((void*)v);
396 else {
397 v->next = freelist[v->k];
398 freelist[v->k] = v;
399 }
400 }
401 }
402
403 #else
404
405 /* Alternative versions of Balloc and Bfree that use PyMem_Malloc and
406 PyMem_Free directly in place of the custom memory allocation scheme above.
407 These are provided for the benefit of memory debugging tools like
408 Valgrind. */
409
410 /* Allocate space for a Bigint with up to 1<<k digits */
411
412 static Bigint *
Balloc(int k)413 Balloc(int k)
414 {
415 int x;
416 Bigint *rv;
417 unsigned int len;
418
419 x = 1 << k;
420 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1)
421 /sizeof(double);
422
423 rv = (Bigint*)MALLOC(len*sizeof(double));
424 if (rv == NULL)
425 return NULL;
426
427 rv->k = k;
428 rv->maxwds = x;
429 rv->sign = rv->wds = 0;
430 return rv;
431 }
432
433 /* Free a Bigint allocated with Balloc */
434
435 static void
Bfree(Bigint * v)436 Bfree(Bigint *v)
437 {
438 if (v) {
439 FREE((void*)v);
440 }
441 }
442
443 #endif /* Py_USING_MEMORY_DEBUGGER */
444
445 #define Bcopy(x,y) memcpy((char *)&x->sign, (char *)&y->sign, \
446 y->wds*sizeof(Long) + 2*sizeof(int))
447
448 /* Multiply a Bigint b by m and add a. Either modifies b in place and returns
449 a pointer to the modified b, or Bfrees b and returns a pointer to a copy.
450 On failure, return NULL. In this case, b will have been already freed. */
451
452 static Bigint *
multadd(Bigint * b,int m,int a)453 multadd(Bigint *b, int m, int a) /* multiply by m and add a */
454 {
455 int i, wds;
456 ULong *x;
457 ULLong carry, y;
458 Bigint *b1;
459
460 wds = b->wds;
461 x = b->x;
462 i = 0;
463 carry = a;
464 do {
465 y = *x * (ULLong)m + carry;
466 carry = y >> 32;
467 *x++ = (ULong)(y & FFFFFFFF);
468 }
469 while(++i < wds);
470 if (carry) {
471 if (wds >= b->maxwds) {
472 b1 = Balloc(b->k+1);
473 if (b1 == NULL){
474 Bfree(b);
475 return NULL;
476 }
477 Bcopy(b1, b);
478 Bfree(b);
479 b = b1;
480 }
481 b->x[wds++] = (ULong)carry;
482 b->wds = wds;
483 }
484 return b;
485 }
486
487 /* convert a string s containing nd decimal digits (possibly containing a
488 decimal separator at position nd0, which is ignored) to a Bigint. This
489 function carries on where the parsing code in _Py_dg_strtod leaves off: on
490 entry, y9 contains the result of converting the first 9 digits. Returns
491 NULL on failure. */
492
493 static Bigint *
s2b(const char * s,int nd0,int nd,ULong y9)494 s2b(const char *s, int nd0, int nd, ULong y9)
495 {
496 Bigint *b;
497 int i, k;
498 Long x, y;
499
500 x = (nd + 8) / 9;
501 for(k = 0, y = 1; x > y; y <<= 1, k++) ;
502 b = Balloc(k);
503 if (b == NULL)
504 return NULL;
505 b->x[0] = y9;
506 b->wds = 1;
507
508 if (nd <= 9)
509 return b;
510
511 s += 9;
512 for (i = 9; i < nd0; i++) {
513 b = multadd(b, 10, *s++ - '0');
514 if (b == NULL)
515 return NULL;
516 }
517 s++;
518 for(; i < nd; i++) {
519 b = multadd(b, 10, *s++ - '0');
520 if (b == NULL)
521 return NULL;
522 }
523 return b;
524 }
525
526 /* count leading 0 bits in the 32-bit integer x. */
527
528 static int
hi0bits(ULong x)529 hi0bits(ULong x)
530 {
531 int k = 0;
532
533 if (!(x & 0xffff0000)) {
534 k = 16;
535 x <<= 16;
536 }
537 if (!(x & 0xff000000)) {
538 k += 8;
539 x <<= 8;
540 }
541 if (!(x & 0xf0000000)) {
542 k += 4;
543 x <<= 4;
544 }
545 if (!(x & 0xc0000000)) {
546 k += 2;
547 x <<= 2;
548 }
549 if (!(x & 0x80000000)) {
550 k++;
551 if (!(x & 0x40000000))
552 return 32;
553 }
554 return k;
555 }
556
557 /* count trailing 0 bits in the 32-bit integer y, and shift y right by that
558 number of bits. */
559
560 static int
lo0bits(ULong * y)561 lo0bits(ULong *y)
562 {
563 int k;
564 ULong x = *y;
565
566 if (x & 7) {
567 if (x & 1)
568 return 0;
569 if (x & 2) {
570 *y = x >> 1;
571 return 1;
572 }
573 *y = x >> 2;
574 return 2;
575 }
576 k = 0;
577 if (!(x & 0xffff)) {
578 k = 16;
579 x >>= 16;
580 }
581 if (!(x & 0xff)) {
582 k += 8;
583 x >>= 8;
584 }
585 if (!(x & 0xf)) {
586 k += 4;
587 x >>= 4;
588 }
589 if (!(x & 0x3)) {
590 k += 2;
591 x >>= 2;
592 }
593 if (!(x & 1)) {
594 k++;
595 x >>= 1;
596 if (!x)
597 return 32;
598 }
599 *y = x;
600 return k;
601 }
602
603 /* convert a small nonnegative integer to a Bigint */
604
605 static Bigint *
i2b(int i)606 i2b(int i)
607 {
608 Bigint *b;
609
610 b = Balloc(1);
611 if (b == NULL)
612 return NULL;
613 b->x[0] = i;
614 b->wds = 1;
615 return b;
616 }
617
618 /* multiply two Bigints. Returns a new Bigint, or NULL on failure. Ignores
619 the signs of a and b. */
620
621 static Bigint *
mult(Bigint * a,Bigint * b)622 mult(Bigint *a, Bigint *b)
623 {
624 Bigint *c;
625 int k, wa, wb, wc;
626 ULong *x, *xa, *xae, *xb, *xbe, *xc, *xc0;
627 ULong y;
628 ULLong carry, z;
629
630 if ((!a->x[0] && a->wds == 1) || (!b->x[0] && b->wds == 1)) {
631 c = Balloc(0);
632 if (c == NULL)
633 return NULL;
634 c->wds = 1;
635 c->x[0] = 0;
636 return c;
637 }
638
639 if (a->wds < b->wds) {
640 c = a;
641 a = b;
642 b = c;
643 }
644 k = a->k;
645 wa = a->wds;
646 wb = b->wds;
647 wc = wa + wb;
648 if (wc > a->maxwds)
649 k++;
650 c = Balloc(k);
651 if (c == NULL)
652 return NULL;
653 for(x = c->x, xa = x + wc; x < xa; x++)
654 *x = 0;
655 xa = a->x;
656 xae = xa + wa;
657 xb = b->x;
658 xbe = xb + wb;
659 xc0 = c->x;
660 for(; xb < xbe; xc0++) {
661 if ((y = *xb++)) {
662 x = xa;
663 xc = xc0;
664 carry = 0;
665 do {
666 z = *x++ * (ULLong)y + *xc + carry;
667 carry = z >> 32;
668 *xc++ = (ULong)(z & FFFFFFFF);
669 }
670 while(x < xae);
671 *xc = (ULong)carry;
672 }
673 }
674 for(xc0 = c->x, xc = xc0 + wc; wc > 0 && !*--xc; --wc) ;
675 c->wds = wc;
676 return c;
677 }
678
679 #ifndef Py_USING_MEMORY_DEBUGGER
680
681 /* p5s is a linked list of powers of 5 of the form 5**(2**i), i >= 2 */
682
683 static Bigint *p5s;
684
685 /* multiply the Bigint b by 5**k. Returns a pointer to the result, or NULL on
686 failure; if the returned pointer is distinct from b then the original
687 Bigint b will have been Bfree'd. Ignores the sign of b. */
688
689 static Bigint *
pow5mult(Bigint * b,int k)690 pow5mult(Bigint *b, int k)
691 {
692 Bigint *b1, *p5, *p51;
693 int i;
694 static const int p05[3] = { 5, 25, 125 };
695
696 if ((i = k & 3)) {
697 b = multadd(b, p05[i-1], 0);
698 if (b == NULL)
699 return NULL;
700 }
701
702 if (!(k >>= 2))
703 return b;
704 p5 = p5s;
705 if (!p5) {
706 /* first time */
707 p5 = i2b(625);
708 if (p5 == NULL) {
709 Bfree(b);
710 return NULL;
711 }
712 p5s = p5;
713 p5->next = 0;
714 }
715 for(;;) {
716 if (k & 1) {
717 b1 = mult(b, p5);
718 Bfree(b);
719 b = b1;
720 if (b == NULL)
721 return NULL;
722 }
723 if (!(k >>= 1))
724 break;
725 p51 = p5->next;
726 if (!p51) {
727 p51 = mult(p5,p5);
728 if (p51 == NULL) {
729 Bfree(b);
730 return NULL;
731 }
732 p51->next = 0;
733 p5->next = p51;
734 }
735 p5 = p51;
736 }
737 return b;
738 }
739
740 #else
741
742 /* Version of pow5mult that doesn't cache powers of 5. Provided for
743 the benefit of memory debugging tools like Valgrind. */
744
745 static Bigint *
pow5mult(Bigint * b,int k)746 pow5mult(Bigint *b, int k)
747 {
748 Bigint *b1, *p5, *p51;
749 int i;
750 static const int p05[3] = { 5, 25, 125 };
751
752 if ((i = k & 3)) {
753 b = multadd(b, p05[i-1], 0);
754 if (b == NULL)
755 return NULL;
756 }
757
758 if (!(k >>= 2))
759 return b;
760 p5 = i2b(625);
761 if (p5 == NULL) {
762 Bfree(b);
763 return NULL;
764 }
765
766 for(;;) {
767 if (k & 1) {
768 b1 = mult(b, p5);
769 Bfree(b);
770 b = b1;
771 if (b == NULL) {
772 Bfree(p5);
773 return NULL;
774 }
775 }
776 if (!(k >>= 1))
777 break;
778 p51 = mult(p5, p5);
779 Bfree(p5);
780 p5 = p51;
781 if (p5 == NULL) {
782 Bfree(b);
783 return NULL;
784 }
785 }
786 Bfree(p5);
787 return b;
788 }
789
790 #endif /* Py_USING_MEMORY_DEBUGGER */
791
792 /* shift a Bigint b left by k bits. Return a pointer to the shifted result,
793 or NULL on failure. If the returned pointer is distinct from b then the
794 original b will have been Bfree'd. Ignores the sign of b. */
795
796 static Bigint *
lshift(Bigint * b,int k)797 lshift(Bigint *b, int k)
798 {
799 int i, k1, n, n1;
800 Bigint *b1;
801 ULong *x, *x1, *xe, z;
802
803 if (!k || (!b->x[0] && b->wds == 1))
804 return b;
805
806 n = k >> 5;
807 k1 = b->k;
808 n1 = n + b->wds + 1;
809 for(i = b->maxwds; n1 > i; i <<= 1)
810 k1++;
811 b1 = Balloc(k1);
812 if (b1 == NULL) {
813 Bfree(b);
814 return NULL;
815 }
816 x1 = b1->x;
817 for(i = 0; i < n; i++)
818 *x1++ = 0;
819 x = b->x;
820 xe = x + b->wds;
821 if (k &= 0x1f) {
822 k1 = 32 - k;
823 z = 0;
824 do {
825 *x1++ = *x << k | z;
826 z = *x++ >> k1;
827 }
828 while(x < xe);
829 if ((*x1 = z))
830 ++n1;
831 }
832 else do
833 *x1++ = *x++;
834 while(x < xe);
835 b1->wds = n1 - 1;
836 Bfree(b);
837 return b1;
838 }
839
840 /* Do a three-way compare of a and b, returning -1 if a < b, 0 if a == b and
841 1 if a > b. Ignores signs of a and b. */
842
843 static int
cmp(Bigint * a,Bigint * b)844 cmp(Bigint *a, Bigint *b)
845 {
846 ULong *xa, *xa0, *xb, *xb0;
847 int i, j;
848
849 i = a->wds;
850 j = b->wds;
851 #ifdef DEBUG
852 if (i > 1 && !a->x[i-1])
853 Bug("cmp called with a->x[a->wds-1] == 0");
854 if (j > 1 && !b->x[j-1])
855 Bug("cmp called with b->x[b->wds-1] == 0");
856 #endif
857 if (i -= j)
858 return i;
859 xa0 = a->x;
860 xa = xa0 + j;
861 xb0 = b->x;
862 xb = xb0 + j;
863 for(;;) {
864 if (*--xa != *--xb)
865 return *xa < *xb ? -1 : 1;
866 if (xa <= xa0)
867 break;
868 }
869 return 0;
870 }
871
872 /* Take the difference of Bigints a and b, returning a new Bigint. Returns
873 NULL on failure. The signs of a and b are ignored, but the sign of the
874 result is set appropriately. */
875
876 static Bigint *
diff(Bigint * a,Bigint * b)877 diff(Bigint *a, Bigint *b)
878 {
879 Bigint *c;
880 int i, wa, wb;
881 ULong *xa, *xae, *xb, *xbe, *xc;
882 ULLong borrow, y;
883
884 i = cmp(a,b);
885 if (!i) {
886 c = Balloc(0);
887 if (c == NULL)
888 return NULL;
889 c->wds = 1;
890 c->x[0] = 0;
891 return c;
892 }
893 if (i < 0) {
894 c = a;
895 a = b;
896 b = c;
897 i = 1;
898 }
899 else
900 i = 0;
901 c = Balloc(a->k);
902 if (c == NULL)
903 return NULL;
904 c->sign = i;
905 wa = a->wds;
906 xa = a->x;
907 xae = xa + wa;
908 wb = b->wds;
909 xb = b->x;
910 xbe = xb + wb;
911 xc = c->x;
912 borrow = 0;
913 do {
914 y = (ULLong)*xa++ - *xb++ - borrow;
915 borrow = y >> 32 & (ULong)1;
916 *xc++ = (ULong)(y & FFFFFFFF);
917 }
918 while(xb < xbe);
919 while(xa < xae) {
920 y = *xa++ - borrow;
921 borrow = y >> 32 & (ULong)1;
922 *xc++ = (ULong)(y & FFFFFFFF);
923 }
924 while(!*--xc)
925 wa--;
926 c->wds = wa;
927 return c;
928 }
929
930 /* Given a positive normal double x, return the difference between x and the
931 next double up. Doesn't give correct results for subnormals. */
932
933 static double
ulp(U * x)934 ulp(U *x)
935 {
936 Long L;
937 U u;
938
939 L = (word0(x) & Exp_mask) - (P-1)*Exp_msk1;
940 word0(&u) = L;
941 word1(&u) = 0;
942 return dval(&u);
943 }
944
945 /* Convert a Bigint to a double plus an exponent */
946
947 static double
b2d(Bigint * a,int * e)948 b2d(Bigint *a, int *e)
949 {
950 ULong *xa, *xa0, w, y, z;
951 int k;
952 U d;
953
954 xa0 = a->x;
955 xa = xa0 + a->wds;
956 y = *--xa;
957 #ifdef DEBUG
958 if (!y) Bug("zero y in b2d");
959 #endif
960 k = hi0bits(y);
961 *e = 32 - k;
962 if (k < Ebits) {
963 word0(&d) = Exp_1 | y >> (Ebits - k);
964 w = xa > xa0 ? *--xa : 0;
965 word1(&d) = y << ((32-Ebits) + k) | w >> (Ebits - k);
966 goto ret_d;
967 }
968 z = xa > xa0 ? *--xa : 0;
969 if (k -= Ebits) {
970 word0(&d) = Exp_1 | y << k | z >> (32 - k);
971 y = xa > xa0 ? *--xa : 0;
972 word1(&d) = z << k | y >> (32 - k);
973 }
974 else {
975 word0(&d) = Exp_1 | y;
976 word1(&d) = z;
977 }
978 ret_d:
979 return dval(&d);
980 }
981
982 /* Convert a scaled double to a Bigint plus an exponent. Similar to d2b,
983 except that it accepts the scale parameter used in _Py_dg_strtod (which
984 should be either 0 or 2*P), and the normalization for the return value is
985 different (see below). On input, d should be finite and nonnegative, and d
986 / 2**scale should be exactly representable as an IEEE 754 double.
987
988 Returns a Bigint b and an integer e such that
989
990 dval(d) / 2**scale = b * 2**e.
991
992 Unlike d2b, b is not necessarily odd: b and e are normalized so
993 that either 2**(P-1) <= b < 2**P and e >= Etiny, or b < 2**P
994 and e == Etiny. This applies equally to an input of 0.0: in that
995 case the return values are b = 0 and e = Etiny.
996
997 The above normalization ensures that for all possible inputs d,
998 2**e gives ulp(d/2**scale).
999
1000 Returns NULL on failure.
1001 */
1002
1003 static Bigint *
sd2b(U * d,int scale,int * e)1004 sd2b(U *d, int scale, int *e)
1005 {
1006 Bigint *b;
1007
1008 b = Balloc(1);
1009 if (b == NULL)
1010 return NULL;
1011
1012 /* First construct b and e assuming that scale == 0. */
1013 b->wds = 2;
1014 b->x[0] = word1(d);
1015 b->x[1] = word0(d) & Frac_mask;
1016 *e = Etiny - 1 + (int)((word0(d) & Exp_mask) >> Exp_shift);
1017 if (*e < Etiny)
1018 *e = Etiny;
1019 else
1020 b->x[1] |= Exp_msk1;
1021
1022 /* Now adjust for scale, provided that b != 0. */
1023 if (scale && (b->x[0] || b->x[1])) {
1024 *e -= scale;
1025 if (*e < Etiny) {
1026 scale = Etiny - *e;
1027 *e = Etiny;
1028 /* We can't shift more than P-1 bits without shifting out a 1. */
1029 assert(0 < scale && scale <= P - 1);
1030 if (scale >= 32) {
1031 /* The bits shifted out should all be zero. */
1032 assert(b->x[0] == 0);
1033 b->x[0] = b->x[1];
1034 b->x[1] = 0;
1035 scale -= 32;
1036 }
1037 if (scale) {
1038 /* The bits shifted out should all be zero. */
1039 assert(b->x[0] << (32 - scale) == 0);
1040 b->x[0] = (b->x[0] >> scale) | (b->x[1] << (32 - scale));
1041 b->x[1] >>= scale;
1042 }
1043 }
1044 }
1045 /* Ensure b is normalized. */
1046 if (!b->x[1])
1047 b->wds = 1;
1048
1049 return b;
1050 }
1051
1052 /* Convert a double to a Bigint plus an exponent. Return NULL on failure.
1053
1054 Given a finite nonzero double d, return an odd Bigint b and exponent *e
1055 such that fabs(d) = b * 2**e. On return, *bbits gives the number of
1056 significant bits of b; that is, 2**(*bbits-1) <= b < 2**(*bbits).
1057
1058 If d is zero, then b == 0, *e == -1010, *bbits = 0.
1059 */
1060
1061 static Bigint *
d2b(U * d,int * e,int * bits)1062 d2b(U *d, int *e, int *bits)
1063 {
1064 Bigint *b;
1065 int de, k;
1066 ULong *x, y, z;
1067 int i;
1068
1069 b = Balloc(1);
1070 if (b == NULL)
1071 return NULL;
1072 x = b->x;
1073
1074 z = word0(d) & Frac_mask;
1075 word0(d) &= 0x7fffffff; /* clear sign bit, which we ignore */
1076 if ((de = (int)(word0(d) >> Exp_shift)))
1077 z |= Exp_msk1;
1078 if ((y = word1(d))) {
1079 if ((k = lo0bits(&y))) {
1080 x[0] = y | z << (32 - k);
1081 z >>= k;
1082 }
1083 else
1084 x[0] = y;
1085 i =
1086 b->wds = (x[1] = z) ? 2 : 1;
1087 }
1088 else {
1089 k = lo0bits(&z);
1090 x[0] = z;
1091 i =
1092 b->wds = 1;
1093 k += 32;
1094 }
1095 if (de) {
1096 *e = de - Bias - (P-1) + k;
1097 *bits = P - k;
1098 }
1099 else {
1100 *e = de - Bias - (P-1) + 1 + k;
1101 *bits = 32*i - hi0bits(x[i-1]);
1102 }
1103 return b;
1104 }
1105
1106 /* Compute the ratio of two Bigints, as a double. The result may have an
1107 error of up to 2.5 ulps. */
1108
1109 static double
ratio(Bigint * a,Bigint * b)1110 ratio(Bigint *a, Bigint *b)
1111 {
1112 U da, db;
1113 int k, ka, kb;
1114
1115 dval(&da) = b2d(a, &ka);
1116 dval(&db) = b2d(b, &kb);
1117 k = ka - kb + 32*(a->wds - b->wds);
1118 if (k > 0)
1119 word0(&da) += k*Exp_msk1;
1120 else {
1121 k = -k;
1122 word0(&db) += k*Exp_msk1;
1123 }
1124 return dval(&da) / dval(&db);
1125 }
1126
1127 static const double
1128 tens[] = {
1129 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9,
1130 1e10, 1e11, 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19,
1131 1e20, 1e21, 1e22
1132 };
1133
1134 static const double
1135 bigtens[] = { 1e16, 1e32, 1e64, 1e128, 1e256 };
1136 static const double tinytens[] = { 1e-16, 1e-32, 1e-64, 1e-128,
1137 9007199254740992.*9007199254740992.e-256
1138 /* = 2^106 * 1e-256 */
1139 };
1140 /* The factor of 2^53 in tinytens[4] helps us avoid setting the underflow */
1141 /* flag unnecessarily. It leads to a song and dance at the end of strtod. */
1142 #define Scale_Bit 0x10
1143 #define n_bigtens 5
1144
1145 #define ULbits 32
1146 #define kshift 5
1147 #define kmask 31
1148
1149
1150 static int
dshift(Bigint * b,int p2)1151 dshift(Bigint *b, int p2)
1152 {
1153 int rv = hi0bits(b->x[b->wds-1]) - 4;
1154 if (p2 > 0)
1155 rv -= p2;
1156 return rv & kmask;
1157 }
1158
1159 /* special case of Bigint division. The quotient is always in the range 0 <=
1160 quotient < 10, and on entry the divisor S is normalized so that its top 4
1161 bits (28--31) are zero and bit 27 is set. */
1162
1163 static int
quorem(Bigint * b,Bigint * S)1164 quorem(Bigint *b, Bigint *S)
1165 {
1166 int n;
1167 ULong *bx, *bxe, q, *sx, *sxe;
1168 ULLong borrow, carry, y, ys;
1169
1170 n = S->wds;
1171 #ifdef DEBUG
1172 /*debug*/ if (b->wds > n)
1173 /*debug*/ Bug("oversize b in quorem");
1174 #endif
1175 if (b->wds < n)
1176 return 0;
1177 sx = S->x;
1178 sxe = sx + --n;
1179 bx = b->x;
1180 bxe = bx + n;
1181 q = *bxe / (*sxe + 1); /* ensure q <= true quotient */
1182 #ifdef DEBUG
1183 /*debug*/ if (q > 9)
1184 /*debug*/ Bug("oversized quotient in quorem");
1185 #endif
1186 if (q) {
1187 borrow = 0;
1188 carry = 0;
1189 do {
1190 ys = *sx++ * (ULLong)q + carry;
1191 carry = ys >> 32;
1192 y = *bx - (ys & FFFFFFFF) - borrow;
1193 borrow = y >> 32 & (ULong)1;
1194 *bx++ = (ULong)(y & FFFFFFFF);
1195 }
1196 while(sx <= sxe);
1197 if (!*bxe) {
1198 bx = b->x;
1199 while(--bxe > bx && !*bxe)
1200 --n;
1201 b->wds = n;
1202 }
1203 }
1204 if (cmp(b, S) >= 0) {
1205 q++;
1206 borrow = 0;
1207 carry = 0;
1208 bx = b->x;
1209 sx = S->x;
1210 do {
1211 ys = *sx++ + carry;
1212 carry = ys >> 32;
1213 y = *bx - (ys & FFFFFFFF) - borrow;
1214 borrow = y >> 32 & (ULong)1;
1215 *bx++ = (ULong)(y & FFFFFFFF);
1216 }
1217 while(sx <= sxe);
1218 bx = b->x;
1219 bxe = bx + n;
1220 if (!*bxe) {
1221 while(--bxe > bx && !*bxe)
1222 --n;
1223 b->wds = n;
1224 }
1225 }
1226 return q;
1227 }
1228
1229 /* sulp(x) is a version of ulp(x) that takes bc.scale into account.
1230
1231 Assuming that x is finite and nonnegative (positive zero is fine
1232 here) and x / 2^bc.scale is exactly representable as a double,
1233 sulp(x) is equivalent to 2^bc.scale * ulp(x / 2^bc.scale). */
1234
1235 static double
sulp(U * x,BCinfo * bc)1236 sulp(U *x, BCinfo *bc)
1237 {
1238 U u;
1239
1240 if (bc->scale && 2*P + 1 > (int)((word0(x) & Exp_mask) >> Exp_shift)) {
1241 /* rv/2^bc->scale is subnormal */
1242 word0(&u) = (P+2)*Exp_msk1;
1243 word1(&u) = 0;
1244 return u.d;
1245 }
1246 else {
1247 assert(word0(x) || word1(x)); /* x != 0.0 */
1248 return ulp(x);
1249 }
1250 }
1251
1252 /* The bigcomp function handles some hard cases for strtod, for inputs
1253 with more than STRTOD_DIGLIM digits. It's called once an initial
1254 estimate for the double corresponding to the input string has
1255 already been obtained by the code in _Py_dg_strtod.
1256
1257 The bigcomp function is only called after _Py_dg_strtod has found a
1258 double value rv such that either rv or rv + 1ulp represents the
1259 correctly rounded value corresponding to the original string. It
1260 determines which of these two values is the correct one by
1261 computing the decimal digits of rv + 0.5ulp and comparing them with
1262 the corresponding digits of s0.
1263
1264 In the following, write dv for the absolute value of the number represented
1265 by the input string.
1266
1267 Inputs:
1268
1269 s0 points to the first significant digit of the input string.
1270
1271 rv is a (possibly scaled) estimate for the closest double value to the
1272 value represented by the original input to _Py_dg_strtod. If
1273 bc->scale is nonzero, then rv/2^(bc->scale) is the approximation to
1274 the input value.
1275
1276 bc is a struct containing information gathered during the parsing and
1277 estimation steps of _Py_dg_strtod. Description of fields follows:
1278
1279 bc->e0 gives the exponent of the input value, such that dv = (integer
1280 given by the bd->nd digits of s0) * 10**e0
1281
1282 bc->nd gives the total number of significant digits of s0. It will
1283 be at least 1.
1284
1285 bc->nd0 gives the number of significant digits of s0 before the
1286 decimal separator. If there's no decimal separator, bc->nd0 ==
1287 bc->nd.
1288
1289 bc->scale is the value used to scale rv to avoid doing arithmetic with
1290 subnormal values. It's either 0 or 2*P (=106).
1291
1292 Outputs:
1293
1294 On successful exit, rv/2^(bc->scale) is the closest double to dv.
1295
1296 Returns 0 on success, -1 on failure (e.g., due to a failed malloc call). */
1297
1298 static int
bigcomp(U * rv,const char * s0,BCinfo * bc)1299 bigcomp(U *rv, const char *s0, BCinfo *bc)
1300 {
1301 Bigint *b, *d;
1302 int b2, d2, dd, i, nd, nd0, odd, p2, p5;
1303
1304 nd = bc->nd;
1305 nd0 = bc->nd0;
1306 p5 = nd + bc->e0;
1307 b = sd2b(rv, bc->scale, &p2);
1308 if (b == NULL)
1309 return -1;
1310
1311 /* record whether the lsb of rv/2^(bc->scale) is odd: in the exact halfway
1312 case, this is used for round to even. */
1313 odd = b->x[0] & 1;
1314
1315 /* left shift b by 1 bit and or a 1 into the least significant bit;
1316 this gives us b * 2**p2 = rv/2^(bc->scale) + 0.5 ulp. */
1317 b = lshift(b, 1);
1318 if (b == NULL)
1319 return -1;
1320 b->x[0] |= 1;
1321 p2--;
1322
1323 p2 -= p5;
1324 d = i2b(1);
1325 if (d == NULL) {
1326 Bfree(b);
1327 return -1;
1328 }
1329 /* Arrange for convenient computation of quotients:
1330 * shift left if necessary so divisor has 4 leading 0 bits.
1331 */
1332 if (p5 > 0) {
1333 d = pow5mult(d, p5);
1334 if (d == NULL) {
1335 Bfree(b);
1336 return -1;
1337 }
1338 }
1339 else if (p5 < 0) {
1340 b = pow5mult(b, -p5);
1341 if (b == NULL) {
1342 Bfree(d);
1343 return -1;
1344 }
1345 }
1346 if (p2 > 0) {
1347 b2 = p2;
1348 d2 = 0;
1349 }
1350 else {
1351 b2 = 0;
1352 d2 = -p2;
1353 }
1354 i = dshift(d, d2);
1355 if ((b2 += i) > 0) {
1356 b = lshift(b, b2);
1357 if (b == NULL) {
1358 Bfree(d);
1359 return -1;
1360 }
1361 }
1362 if ((d2 += i) > 0) {
1363 d = lshift(d, d2);
1364 if (d == NULL) {
1365 Bfree(b);
1366 return -1;
1367 }
1368 }
1369
1370 /* Compare s0 with b/d: set dd to -1, 0, or 1 according as s0 < b/d, s0 ==
1371 * b/d, or s0 > b/d. Here the digits of s0 are thought of as representing
1372 * a number in the range [0.1, 1). */
1373 if (cmp(b, d) >= 0)
1374 /* b/d >= 1 */
1375 dd = -1;
1376 else {
1377 i = 0;
1378 for(;;) {
1379 b = multadd(b, 10, 0);
1380 if (b == NULL) {
1381 Bfree(d);
1382 return -1;
1383 }
1384 dd = s0[i < nd0 ? i : i+1] - '0' - quorem(b, d);
1385 i++;
1386
1387 if (dd)
1388 break;
1389 if (!b->x[0] && b->wds == 1) {
1390 /* b/d == 0 */
1391 dd = i < nd;
1392 break;
1393 }
1394 if (!(i < nd)) {
1395 /* b/d != 0, but digits of s0 exhausted */
1396 dd = -1;
1397 break;
1398 }
1399 }
1400 }
1401 Bfree(b);
1402 Bfree(d);
1403 if (dd > 0 || (dd == 0 && odd))
1404 dval(rv) += sulp(rv, bc);
1405 return 0;
1406 }
1407
1408 /* Return a 'standard' NaN value.
1409
1410 There are exactly two quiet NaNs that don't arise by 'quieting' signaling
1411 NaNs (see IEEE 754-2008, section 6.2.1). If sign == 0, return the one whose
1412 sign bit is cleared. Otherwise, return the one whose sign bit is set.
1413 */
1414
1415 double
_Py_dg_stdnan(int sign)1416 _Py_dg_stdnan(int sign)
1417 {
1418 U rv;
1419 word0(&rv) = NAN_WORD0;
1420 word1(&rv) = NAN_WORD1;
1421 if (sign)
1422 word0(&rv) |= Sign_bit;
1423 return dval(&rv);
1424 }
1425
1426 /* Return positive or negative infinity, according to the given sign (0 for
1427 * positive infinity, 1 for negative infinity). */
1428
1429 double
_Py_dg_infinity(int sign)1430 _Py_dg_infinity(int sign)
1431 {
1432 U rv;
1433 word0(&rv) = POSINF_WORD0;
1434 word1(&rv) = POSINF_WORD1;
1435 return sign ? -dval(&rv) : dval(&rv);
1436 }
1437
1438 double
_Py_dg_strtod(const char * s00,char ** se)1439 _Py_dg_strtod(const char *s00, char **se)
1440 {
1441 int bb2, bb5, bbe, bd2, bd5, bs2, c, dsign, e, e1, error;
1442 int esign, i, j, k, lz, nd, nd0, odd, sign;
1443 const char *s, *s0, *s1;
1444 double aadj, aadj1;
1445 U aadj2, adj, rv, rv0;
1446 ULong y, z, abs_exp;
1447 Long L;
1448 BCinfo bc;
1449 Bigint *bb = NULL, *bd = NULL, *bd0 = NULL, *bs = NULL, *delta = NULL;
1450 size_t ndigits, fraclen;
1451 double result;
1452
1453 dval(&rv) = 0.;
1454
1455 /* Start parsing. */
1456 c = *(s = s00);
1457
1458 /* Parse optional sign, if present. */
1459 sign = 0;
1460 switch (c) {
1461 case '-':
1462 sign = 1;
1463 /* fall through */
1464 case '+':
1465 c = *++s;
1466 }
1467
1468 /* Skip leading zeros: lz is true iff there were leading zeros. */
1469 s1 = s;
1470 while (c == '0')
1471 c = *++s;
1472 lz = s != s1;
1473
1474 /* Point s0 at the first nonzero digit (if any). fraclen will be the
1475 number of digits between the decimal point and the end of the
1476 digit string. ndigits will be the total number of digits ignoring
1477 leading zeros. */
1478 s0 = s1 = s;
1479 while ('0' <= c && c <= '9')
1480 c = *++s;
1481 ndigits = s - s1;
1482 fraclen = 0;
1483
1484 /* Parse decimal point and following digits. */
1485 if (c == '.') {
1486 c = *++s;
1487 if (!ndigits) {
1488 s1 = s;
1489 while (c == '0')
1490 c = *++s;
1491 lz = lz || s != s1;
1492 fraclen += (s - s1);
1493 s0 = s;
1494 }
1495 s1 = s;
1496 while ('0' <= c && c <= '9')
1497 c = *++s;
1498 ndigits += s - s1;
1499 fraclen += s - s1;
1500 }
1501
1502 /* Now lz is true if and only if there were leading zero digits, and
1503 ndigits gives the total number of digits ignoring leading zeros. A
1504 valid input must have at least one digit. */
1505 if (!ndigits && !lz) {
1506 if (se)
1507 *se = (char *)s00;
1508 goto parse_error;
1509 }
1510
1511 /* Range check ndigits and fraclen to make sure that they, and values
1512 computed with them, can safely fit in an int. */
1513 if (ndigits > MAX_DIGITS || fraclen > MAX_DIGITS) {
1514 if (se)
1515 *se = (char *)s00;
1516 goto parse_error;
1517 }
1518 nd = (int)ndigits;
1519 nd0 = (int)ndigits - (int)fraclen;
1520
1521 /* Parse exponent. */
1522 e = 0;
1523 if (c == 'e' || c == 'E') {
1524 s00 = s;
1525 c = *++s;
1526
1527 /* Exponent sign. */
1528 esign = 0;
1529 switch (c) {
1530 case '-':
1531 esign = 1;
1532 /* fall through */
1533 case '+':
1534 c = *++s;
1535 }
1536
1537 /* Skip zeros. lz is true iff there are leading zeros. */
1538 s1 = s;
1539 while (c == '0')
1540 c = *++s;
1541 lz = s != s1;
1542
1543 /* Get absolute value of the exponent. */
1544 s1 = s;
1545 abs_exp = 0;
1546 while ('0' <= c && c <= '9') {
1547 abs_exp = 10*abs_exp + (c - '0');
1548 c = *++s;
1549 }
1550
1551 /* abs_exp will be correct modulo 2**32. But 10**9 < 2**32, so if
1552 there are at most 9 significant exponent digits then overflow is
1553 impossible. */
1554 if (s - s1 > 9 || abs_exp > MAX_ABS_EXP)
1555 e = (int)MAX_ABS_EXP;
1556 else
1557 e = (int)abs_exp;
1558 if (esign)
1559 e = -e;
1560
1561 /* A valid exponent must have at least one digit. */
1562 if (s == s1 && !lz)
1563 s = s00;
1564 }
1565
1566 /* Adjust exponent to take into account position of the point. */
1567 e -= nd - nd0;
1568 if (nd0 <= 0)
1569 nd0 = nd;
1570
1571 /* Finished parsing. Set se to indicate how far we parsed */
1572 if (se)
1573 *se = (char *)s;
1574
1575 /* If all digits were zero, exit with return value +-0.0. Otherwise,
1576 strip trailing zeros: scan back until we hit a nonzero digit. */
1577 if (!nd)
1578 goto ret;
1579 for (i = nd; i > 0; ) {
1580 --i;
1581 if (s0[i < nd0 ? i : i+1] != '0') {
1582 ++i;
1583 break;
1584 }
1585 }
1586 e += nd - i;
1587 nd = i;
1588 if (nd0 > nd)
1589 nd0 = nd;
1590
1591 /* Summary of parsing results. After parsing, and dealing with zero
1592 * inputs, we have values s0, nd0, nd, e, sign, where:
1593 *
1594 * - s0 points to the first significant digit of the input string
1595 *
1596 * - nd is the total number of significant digits (here, and
1597 * below, 'significant digits' means the set of digits of the
1598 * significand of the input that remain after ignoring leading
1599 * and trailing zeros).
1600 *
1601 * - nd0 indicates the position of the decimal point, if present; it
1602 * satisfies 1 <= nd0 <= nd. The nd significant digits are in
1603 * s0[0:nd0] and s0[nd0+1:nd+1] using the usual Python half-open slice
1604 * notation. (If nd0 < nd, then s0[nd0] contains a '.' character; if
1605 * nd0 == nd, then s0[nd0] could be any non-digit character.)
1606 *
1607 * - e is the adjusted exponent: the absolute value of the number
1608 * represented by the original input string is n * 10**e, where
1609 * n is the integer represented by the concatenation of
1610 * s0[0:nd0] and s0[nd0+1:nd+1]
1611 *
1612 * - sign gives the sign of the input: 1 for negative, 0 for positive
1613 *
1614 * - the first and last significant digits are nonzero
1615 */
1616
1617 /* put first DBL_DIG+1 digits into integer y and z.
1618 *
1619 * - y contains the value represented by the first min(9, nd)
1620 * significant digits
1621 *
1622 * - if nd > 9, z contains the value represented by significant digits
1623 * with indices in [9, min(16, nd)). So y * 10**(min(16, nd) - 9) + z
1624 * gives the value represented by the first min(16, nd) sig. digits.
1625 */
1626
1627 bc.e0 = e1 = e;
1628 y = z = 0;
1629 for (i = 0; i < nd; i++) {
1630 if (i < 9)
1631 y = 10*y + s0[i < nd0 ? i : i+1] - '0';
1632 else if (i < DBL_DIG+1)
1633 z = 10*z + s0[i < nd0 ? i : i+1] - '0';
1634 else
1635 break;
1636 }
1637
1638 k = nd < DBL_DIG + 1 ? nd : DBL_DIG + 1;
1639 dval(&rv) = y;
1640 if (k > 9) {
1641 dval(&rv) = tens[k - 9] * dval(&rv) + z;
1642 }
1643 if (nd <= DBL_DIG
1644 && Flt_Rounds == 1
1645 ) {
1646 if (!e)
1647 goto ret;
1648 if (e > 0) {
1649 if (e <= Ten_pmax) {
1650 dval(&rv) *= tens[e];
1651 goto ret;
1652 }
1653 i = DBL_DIG - nd;
1654 if (e <= Ten_pmax + i) {
1655 /* A fancier test would sometimes let us do
1656 * this for larger i values.
1657 */
1658 e -= i;
1659 dval(&rv) *= tens[i];
1660 dval(&rv) *= tens[e];
1661 goto ret;
1662 }
1663 }
1664 else if (e >= -Ten_pmax) {
1665 dval(&rv) /= tens[-e];
1666 goto ret;
1667 }
1668 }
1669 e1 += nd - k;
1670
1671 bc.scale = 0;
1672
1673 /* Get starting approximation = rv * 10**e1 */
1674
1675 if (e1 > 0) {
1676 if ((i = e1 & 15))
1677 dval(&rv) *= tens[i];
1678 if (e1 &= ~15) {
1679 if (e1 > DBL_MAX_10_EXP)
1680 goto ovfl;
1681 e1 >>= 4;
1682 for(j = 0; e1 > 1; j++, e1 >>= 1)
1683 if (e1 & 1)
1684 dval(&rv) *= bigtens[j];
1685 /* The last multiplication could overflow. */
1686 word0(&rv) -= P*Exp_msk1;
1687 dval(&rv) *= bigtens[j];
1688 if ((z = word0(&rv) & Exp_mask)
1689 > Exp_msk1*(DBL_MAX_EXP+Bias-P))
1690 goto ovfl;
1691 if (z > Exp_msk1*(DBL_MAX_EXP+Bias-1-P)) {
1692 /* set to largest number */
1693 /* (Can't trust DBL_MAX) */
1694 word0(&rv) = Big0;
1695 word1(&rv) = Big1;
1696 }
1697 else
1698 word0(&rv) += P*Exp_msk1;
1699 }
1700 }
1701 else if (e1 < 0) {
1702 /* The input decimal value lies in [10**e1, 10**(e1+16)).
1703
1704 If e1 <= -512, underflow immediately.
1705 If e1 <= -256, set bc.scale to 2*P.
1706
1707 So for input value < 1e-256, bc.scale is always set;
1708 for input value >= 1e-240, bc.scale is never set.
1709 For input values in [1e-256, 1e-240), bc.scale may or may
1710 not be set. */
1711
1712 e1 = -e1;
1713 if ((i = e1 & 15))
1714 dval(&rv) /= tens[i];
1715 if (e1 >>= 4) {
1716 if (e1 >= 1 << n_bigtens)
1717 goto undfl;
1718 if (e1 & Scale_Bit)
1719 bc.scale = 2*P;
1720 for(j = 0; e1 > 0; j++, e1 >>= 1)
1721 if (e1 & 1)
1722 dval(&rv) *= tinytens[j];
1723 if (bc.scale && (j = 2*P + 1 - ((word0(&rv) & Exp_mask)
1724 >> Exp_shift)) > 0) {
1725 /* scaled rv is denormal; clear j low bits */
1726 if (j >= 32) {
1727 word1(&rv) = 0;
1728 if (j >= 53)
1729 word0(&rv) = (P+2)*Exp_msk1;
1730 else
1731 word0(&rv) &= 0xffffffff << (j-32);
1732 }
1733 else
1734 word1(&rv) &= 0xffffffff << j;
1735 }
1736 if (!dval(&rv))
1737 goto undfl;
1738 }
1739 }
1740
1741 /* Now the hard part -- adjusting rv to the correct value.*/
1742
1743 /* Put digits into bd: true value = bd * 10^e */
1744
1745 bc.nd = nd;
1746 bc.nd0 = nd0; /* Only needed if nd > STRTOD_DIGLIM, but done here */
1747 /* to silence an erroneous warning about bc.nd0 */
1748 /* possibly not being initialized. */
1749 if (nd > STRTOD_DIGLIM) {
1750 /* ASSERT(STRTOD_DIGLIM >= 18); 18 == one more than the */
1751 /* minimum number of decimal digits to distinguish double values */
1752 /* in IEEE arithmetic. */
1753
1754 /* Truncate input to 18 significant digits, then discard any trailing
1755 zeros on the result by updating nd, nd0, e and y suitably. (There's
1756 no need to update z; it's not reused beyond this point.) */
1757 for (i = 18; i > 0; ) {
1758 /* scan back until we hit a nonzero digit. significant digit 'i'
1759 is s0[i] if i < nd0, s0[i+1] if i >= nd0. */
1760 --i;
1761 if (s0[i < nd0 ? i : i+1] != '0') {
1762 ++i;
1763 break;
1764 }
1765 }
1766 e += nd - i;
1767 nd = i;
1768 if (nd0 > nd)
1769 nd0 = nd;
1770 if (nd < 9) { /* must recompute y */
1771 y = 0;
1772 for(i = 0; i < nd0; ++i)
1773 y = 10*y + s0[i] - '0';
1774 for(; i < nd; ++i)
1775 y = 10*y + s0[i+1] - '0';
1776 }
1777 }
1778 bd0 = s2b(s0, nd0, nd, y);
1779 if (bd0 == NULL)
1780 goto failed_malloc;
1781
1782 /* Notation for the comments below. Write:
1783
1784 - dv for the absolute value of the number represented by the original
1785 decimal input string.
1786
1787 - if we've truncated dv, write tdv for the truncated value.
1788 Otherwise, set tdv == dv.
1789
1790 - srv for the quantity rv/2^bc.scale; so srv is the current binary
1791 approximation to tdv (and dv). It should be exactly representable
1792 in an IEEE 754 double.
1793 */
1794
1795 for(;;) {
1796
1797 /* This is the main correction loop for _Py_dg_strtod.
1798
1799 We've got a decimal value tdv, and a floating-point approximation
1800 srv=rv/2^bc.scale to tdv. The aim is to determine whether srv is
1801 close enough (i.e., within 0.5 ulps) to tdv, and to compute a new
1802 approximation if not.
1803
1804 To determine whether srv is close enough to tdv, compute integers
1805 bd, bb and bs proportional to tdv, srv and 0.5 ulp(srv)
1806 respectively, and then use integer arithmetic to determine whether
1807 |tdv - srv| is less than, equal to, or greater than 0.5 ulp(srv).
1808 */
1809
1810 bd = Balloc(bd0->k);
1811 if (bd == NULL) {
1812 goto failed_malloc;
1813 }
1814 Bcopy(bd, bd0);
1815 bb = sd2b(&rv, bc.scale, &bbe); /* srv = bb * 2^bbe */
1816 if (bb == NULL) {
1817 goto failed_malloc;
1818 }
1819 /* Record whether lsb of bb is odd, in case we need this
1820 for the round-to-even step later. */
1821 odd = bb->x[0] & 1;
1822
1823 /* tdv = bd * 10**e; srv = bb * 2**bbe */
1824 bs = i2b(1);
1825 if (bs == NULL) {
1826 goto failed_malloc;
1827 }
1828
1829 if (e >= 0) {
1830 bb2 = bb5 = 0;
1831 bd2 = bd5 = e;
1832 }
1833 else {
1834 bb2 = bb5 = -e;
1835 bd2 = bd5 = 0;
1836 }
1837 if (bbe >= 0)
1838 bb2 += bbe;
1839 else
1840 bd2 -= bbe;
1841 bs2 = bb2;
1842 bb2++;
1843 bd2++;
1844
1845 /* At this stage bd5 - bb5 == e == bd2 - bb2 + bbe, bb2 - bs2 == 1,
1846 and bs == 1, so:
1847
1848 tdv == bd * 10**e = bd * 2**(bbe - bb2 + bd2) * 5**(bd5 - bb5)
1849 srv == bb * 2**bbe = bb * 2**(bbe - bb2 + bb2)
1850 0.5 ulp(srv) == 2**(bbe-1) = bs * 2**(bbe - bb2 + bs2)
1851
1852 It follows that:
1853
1854 M * tdv = bd * 2**bd2 * 5**bd5
1855 M * srv = bb * 2**bb2 * 5**bb5
1856 M * 0.5 ulp(srv) = bs * 2**bs2 * 5**bb5
1857
1858 for some constant M. (Actually, M == 2**(bb2 - bbe) * 5**bb5, but
1859 this fact is not needed below.)
1860 */
1861
1862 /* Remove factor of 2**i, where i = min(bb2, bd2, bs2). */
1863 i = bb2 < bd2 ? bb2 : bd2;
1864 if (i > bs2)
1865 i = bs2;
1866 if (i > 0) {
1867 bb2 -= i;
1868 bd2 -= i;
1869 bs2 -= i;
1870 }
1871
1872 /* Scale bb, bd, bs by the appropriate powers of 2 and 5. */
1873 if (bb5 > 0) {
1874 bs = pow5mult(bs, bb5);
1875 if (bs == NULL) {
1876 goto failed_malloc;
1877 }
1878 Bigint *bb1 = mult(bs, bb);
1879 Bfree(bb);
1880 bb = bb1;
1881 if (bb == NULL) {
1882 goto failed_malloc;
1883 }
1884 }
1885 if (bb2 > 0) {
1886 bb = lshift(bb, bb2);
1887 if (bb == NULL) {
1888 goto failed_malloc;
1889 }
1890 }
1891 if (bd5 > 0) {
1892 bd = pow5mult(bd, bd5);
1893 if (bd == NULL) {
1894 goto failed_malloc;
1895 }
1896 }
1897 if (bd2 > 0) {
1898 bd = lshift(bd, bd2);
1899 if (bd == NULL) {
1900 goto failed_malloc;
1901 }
1902 }
1903 if (bs2 > 0) {
1904 bs = lshift(bs, bs2);
1905 if (bs == NULL) {
1906 goto failed_malloc;
1907 }
1908 }
1909
1910 /* Now bd, bb and bs are scaled versions of tdv, srv and 0.5 ulp(srv),
1911 respectively. Compute the difference |tdv - srv|, and compare
1912 with 0.5 ulp(srv). */
1913
1914 delta = diff(bb, bd);
1915 if (delta == NULL) {
1916 goto failed_malloc;
1917 }
1918 dsign = delta->sign;
1919 delta->sign = 0;
1920 i = cmp(delta, bs);
1921 if (bc.nd > nd && i <= 0) {
1922 if (dsign)
1923 break; /* Must use bigcomp(). */
1924
1925 /* Here rv overestimates the truncated decimal value by at most
1926 0.5 ulp(rv). Hence rv either overestimates the true decimal
1927 value by <= 0.5 ulp(rv), or underestimates it by some small
1928 amount (< 0.1 ulp(rv)); either way, rv is within 0.5 ulps of
1929 the true decimal value, so it's possible to exit.
1930
1931 Exception: if scaled rv is a normal exact power of 2, but not
1932 DBL_MIN, then rv - 0.5 ulp(rv) takes us all the way down to the
1933 next double, so the correctly rounded result is either rv - 0.5
1934 ulp(rv) or rv; in this case, use bigcomp to distinguish. */
1935
1936 if (!word1(&rv) && !(word0(&rv) & Bndry_mask)) {
1937 /* rv can't be 0, since it's an overestimate for some
1938 nonzero value. So rv is a normal power of 2. */
1939 j = (int)(word0(&rv) & Exp_mask) >> Exp_shift;
1940 /* rv / 2^bc.scale = 2^(j - 1023 - bc.scale); use bigcomp if
1941 rv / 2^bc.scale >= 2^-1021. */
1942 if (j - bc.scale >= 2) {
1943 dval(&rv) -= 0.5 * sulp(&rv, &bc);
1944 break; /* Use bigcomp. */
1945 }
1946 }
1947
1948 {
1949 bc.nd = nd;
1950 i = -1; /* Discarded digits make delta smaller. */
1951 }
1952 }
1953
1954 if (i < 0) {
1955 /* Error is less than half an ulp -- check for
1956 * special case of mantissa a power of two.
1957 */
1958 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask
1959 || (word0(&rv) & Exp_mask) <= (2*P+1)*Exp_msk1
1960 ) {
1961 break;
1962 }
1963 if (!delta->x[0] && delta->wds <= 1) {
1964 /* exact result */
1965 break;
1966 }
1967 delta = lshift(delta,Log2P);
1968 if (delta == NULL) {
1969 goto failed_malloc;
1970 }
1971 if (cmp(delta, bs) > 0)
1972 goto drop_down;
1973 break;
1974 }
1975 if (i == 0) {
1976 /* exactly half-way between */
1977 if (dsign) {
1978 if ((word0(&rv) & Bndry_mask1) == Bndry_mask1
1979 && word1(&rv) == (
1980 (bc.scale &&
1981 (y = word0(&rv) & Exp_mask) <= 2*P*Exp_msk1) ?
1982 (0xffffffff & (0xffffffff << (2*P+1-(y>>Exp_shift)))) :
1983 0xffffffff)) {
1984 /*boundary case -- increment exponent*/
1985 word0(&rv) = (word0(&rv) & Exp_mask)
1986 + Exp_msk1
1987 ;
1988 word1(&rv) = 0;
1989 /* dsign = 0; */
1990 break;
1991 }
1992 }
1993 else if (!(word0(&rv) & Bndry_mask) && !word1(&rv)) {
1994 drop_down:
1995 /* boundary case -- decrement exponent */
1996 if (bc.scale) {
1997 L = word0(&rv) & Exp_mask;
1998 if (L <= (2*P+1)*Exp_msk1) {
1999 if (L > (P+2)*Exp_msk1)
2000 /* round even ==> */
2001 /* accept rv */
2002 break;
2003 /* rv = smallest denormal */
2004 if (bc.nd > nd)
2005 break;
2006 goto undfl;
2007 }
2008 }
2009 L = (word0(&rv) & Exp_mask) - Exp_msk1;
2010 word0(&rv) = L | Bndry_mask1;
2011 word1(&rv) = 0xffffffff;
2012 break;
2013 }
2014 if (!odd)
2015 break;
2016 if (dsign)
2017 dval(&rv) += sulp(&rv, &bc);
2018 else {
2019 dval(&rv) -= sulp(&rv, &bc);
2020 if (!dval(&rv)) {
2021 if (bc.nd >nd)
2022 break;
2023 goto undfl;
2024 }
2025 }
2026 /* dsign = 1 - dsign; */
2027 break;
2028 }
2029 if ((aadj = ratio(delta, bs)) <= 2.) {
2030 if (dsign)
2031 aadj = aadj1 = 1.;
2032 else if (word1(&rv) || word0(&rv) & Bndry_mask) {
2033 if (word1(&rv) == Tiny1 && !word0(&rv)) {
2034 if (bc.nd >nd)
2035 break;
2036 goto undfl;
2037 }
2038 aadj = 1.;
2039 aadj1 = -1.;
2040 }
2041 else {
2042 /* special case -- power of FLT_RADIX to be */
2043 /* rounded down... */
2044
2045 if (aadj < 2./FLT_RADIX)
2046 aadj = 1./FLT_RADIX;
2047 else
2048 aadj *= 0.5;
2049 aadj1 = -aadj;
2050 }
2051 }
2052 else {
2053 aadj *= 0.5;
2054 aadj1 = dsign ? aadj : -aadj;
2055 if (Flt_Rounds == 0)
2056 aadj1 += 0.5;
2057 }
2058 y = word0(&rv) & Exp_mask;
2059
2060 /* Check for overflow */
2061
2062 if (y == Exp_msk1*(DBL_MAX_EXP+Bias-1)) {
2063 dval(&rv0) = dval(&rv);
2064 word0(&rv) -= P*Exp_msk1;
2065 adj.d = aadj1 * ulp(&rv);
2066 dval(&rv) += adj.d;
2067 if ((word0(&rv) & Exp_mask) >=
2068 Exp_msk1*(DBL_MAX_EXP+Bias-P)) {
2069 if (word0(&rv0) == Big0 && word1(&rv0) == Big1) {
2070 goto ovfl;
2071 }
2072 word0(&rv) = Big0;
2073 word1(&rv) = Big1;
2074 goto cont;
2075 }
2076 else
2077 word0(&rv) += P*Exp_msk1;
2078 }
2079 else {
2080 if (bc.scale && y <= 2*P*Exp_msk1) {
2081 if (aadj <= 0x7fffffff) {
2082 if ((z = (ULong)aadj) <= 0)
2083 z = 1;
2084 aadj = z;
2085 aadj1 = dsign ? aadj : -aadj;
2086 }
2087 dval(&aadj2) = aadj1;
2088 word0(&aadj2) += (2*P+1)*Exp_msk1 - y;
2089 aadj1 = dval(&aadj2);
2090 }
2091 adj.d = aadj1 * ulp(&rv);
2092 dval(&rv) += adj.d;
2093 }
2094 z = word0(&rv) & Exp_mask;
2095 if (bc.nd == nd) {
2096 if (!bc.scale)
2097 if (y == z) {
2098 /* Can we stop now? */
2099 L = (Long)aadj;
2100 aadj -= L;
2101 /* The tolerances below are conservative. */
2102 if (dsign || word1(&rv) || word0(&rv) & Bndry_mask) {
2103 if (aadj < .4999999 || aadj > .5000001)
2104 break;
2105 }
2106 else if (aadj < .4999999/FLT_RADIX)
2107 break;
2108 }
2109 }
2110 cont:
2111 Bfree(bb); bb = NULL;
2112 Bfree(bd); bd = NULL;
2113 Bfree(bs); bs = NULL;
2114 Bfree(delta); delta = NULL;
2115 }
2116 if (bc.nd > nd) {
2117 error = bigcomp(&rv, s0, &bc);
2118 if (error)
2119 goto failed_malloc;
2120 }
2121
2122 if (bc.scale) {
2123 word0(&rv0) = Exp_1 - 2*P*Exp_msk1;
2124 word1(&rv0) = 0;
2125 dval(&rv) *= dval(&rv0);
2126 }
2127
2128 ret:
2129 result = sign ? -dval(&rv) : dval(&rv);
2130 goto done;
2131
2132 parse_error:
2133 result = 0.0;
2134 goto done;
2135
2136 failed_malloc:
2137 errno = ENOMEM;
2138 result = -1.0;
2139 goto done;
2140
2141 undfl:
2142 result = sign ? -0.0 : 0.0;
2143 goto done;
2144
2145 ovfl:
2146 errno = ERANGE;
2147 /* Can't trust HUGE_VAL */
2148 word0(&rv) = Exp_mask;
2149 word1(&rv) = 0;
2150 result = sign ? -dval(&rv) : dval(&rv);
2151 goto done;
2152
2153 done:
2154 Bfree(bb);
2155 Bfree(bd);
2156 Bfree(bs);
2157 Bfree(bd0);
2158 Bfree(delta);
2159 return result;
2160
2161 }
2162
2163 static char *
rv_alloc(int i)2164 rv_alloc(int i)
2165 {
2166 int j, k, *r;
2167
2168 j = sizeof(ULong);
2169 for(k = 0;
2170 sizeof(Bigint) - sizeof(ULong) - sizeof(int) + j <= (unsigned)i;
2171 j <<= 1)
2172 k++;
2173 r = (int*)Balloc(k);
2174 if (r == NULL)
2175 return NULL;
2176 *r = k;
2177 return (char *)(r+1);
2178 }
2179
2180 static char *
nrv_alloc(const char * s,char ** rve,int n)2181 nrv_alloc(const char *s, char **rve, int n)
2182 {
2183 char *rv, *t;
2184
2185 rv = rv_alloc(n);
2186 if (rv == NULL)
2187 return NULL;
2188 t = rv;
2189 while((*t = *s++)) t++;
2190 if (rve)
2191 *rve = t;
2192 return rv;
2193 }
2194
2195 /* freedtoa(s) must be used to free values s returned by dtoa
2196 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
2197 * but for consistency with earlier versions of dtoa, it is optional
2198 * when MULTIPLE_THREADS is not defined.
2199 */
2200
2201 void
_Py_dg_freedtoa(char * s)2202 _Py_dg_freedtoa(char *s)
2203 {
2204 Bigint *b = (Bigint *)((int *)s - 1);
2205 b->maxwds = 1 << (b->k = *(int*)b);
2206 Bfree(b);
2207 }
2208
2209 /* dtoa for IEEE arithmetic (dmg): convert double to ASCII string.
2210 *
2211 * Inspired by "How to Print Floating-Point Numbers Accurately" by
2212 * Guy L. Steele, Jr. and Jon L. White [Proc. ACM SIGPLAN '90, pp. 112-126].
2213 *
2214 * Modifications:
2215 * 1. Rather than iterating, we use a simple numeric overestimate
2216 * to determine k = floor(log10(d)). We scale relevant
2217 * quantities using O(log2(k)) rather than O(k) multiplications.
2218 * 2. For some modes > 2 (corresponding to ecvt and fcvt), we don't
2219 * try to generate digits strictly left to right. Instead, we
2220 * compute with fewer bits and propagate the carry if necessary
2221 * when rounding the final digit up. This is often faster.
2222 * 3. Under the assumption that input will be rounded nearest,
2223 * mode 0 renders 1e23 as 1e23 rather than 9.999999999999999e22.
2224 * That is, we allow equality in stopping tests when the
2225 * round-nearest rule will give the same floating-point value
2226 * as would satisfaction of the stopping test with strict
2227 * inequality.
2228 * 4. We remove common factors of powers of 2 from relevant
2229 * quantities.
2230 * 5. When converting floating-point integers less than 1e16,
2231 * we use floating-point arithmetic rather than resorting
2232 * to multiple-precision integers.
2233 * 6. When asked to produce fewer than 15 digits, we first try
2234 * to get by with floating-point arithmetic; we resort to
2235 * multiple-precision integer arithmetic only if we cannot
2236 * guarantee that the floating-point calculation has given
2237 * the correctly rounded result. For k requested digits and
2238 * "uniformly" distributed input, the probability is
2239 * something like 10^(k-15) that we must resort to the Long
2240 * calculation.
2241 */
2242
2243 /* Additional notes (METD): (1) returns NULL on failure. (2) to avoid memory
2244 leakage, a successful call to _Py_dg_dtoa should always be matched by a
2245 call to _Py_dg_freedtoa. */
2246
2247 char *
_Py_dg_dtoa(double dd,int mode,int ndigits,int * decpt,int * sign,char ** rve)2248 _Py_dg_dtoa(double dd, int mode, int ndigits,
2249 int *decpt, int *sign, char **rve)
2250 {
2251 /* Arguments ndigits, decpt, sign are similar to those
2252 of ecvt and fcvt; trailing zeros are suppressed from
2253 the returned string. If not null, *rve is set to point
2254 to the end of the return value. If d is +-Infinity or NaN,
2255 then *decpt is set to 9999.
2256
2257 mode:
2258 0 ==> shortest string that yields d when read in
2259 and rounded to nearest.
2260 1 ==> like 0, but with Steele & White stopping rule;
2261 e.g. with IEEE P754 arithmetic , mode 0 gives
2262 1e23 whereas mode 1 gives 9.999999999999999e22.
2263 2 ==> max(1,ndigits) significant digits. This gives a
2264 return value similar to that of ecvt, except
2265 that trailing zeros are suppressed.
2266 3 ==> through ndigits past the decimal point. This
2267 gives a return value similar to that from fcvt,
2268 except that trailing zeros are suppressed, and
2269 ndigits can be negative.
2270 4,5 ==> similar to 2 and 3, respectively, but (in
2271 round-nearest mode) with the tests of mode 0 to
2272 possibly return a shorter string that rounds to d.
2273 With IEEE arithmetic and compilation with
2274 -DHonor_FLT_ROUNDS, modes 4 and 5 behave the same
2275 as modes 2 and 3 when FLT_ROUNDS != 1.
2276 6-9 ==> Debugging modes similar to mode - 4: don't try
2277 fast floating-point estimate (if applicable).
2278
2279 Values of mode other than 0-9 are treated as mode 0.
2280
2281 Sufficient space is allocated to the return value
2282 to hold the suppressed trailing zeros.
2283 */
2284
2285 int bbits, b2, b5, be, dig, i, ieps, ilim, ilim0, ilim1,
2286 j, j1, k, k0, k_check, leftright, m2, m5, s2, s5,
2287 spec_case, try_quick;
2288 Long L;
2289 int denorm;
2290 ULong x;
2291 Bigint *b, *b1, *delta, *mlo, *mhi, *S;
2292 U d2, eps, u;
2293 double ds;
2294 char *s, *s0;
2295
2296 /* set pointers to NULL, to silence gcc compiler warnings and make
2297 cleanup easier on error */
2298 mlo = mhi = S = 0;
2299 s0 = 0;
2300
2301 u.d = dd;
2302 if (word0(&u) & Sign_bit) {
2303 /* set sign for everything, including 0's and NaNs */
2304 *sign = 1;
2305 word0(&u) &= ~Sign_bit; /* clear sign bit */
2306 }
2307 else
2308 *sign = 0;
2309
2310 /* quick return for Infinities, NaNs and zeros */
2311 if ((word0(&u) & Exp_mask) == Exp_mask)
2312 {
2313 /* Infinity or NaN */
2314 *decpt = 9999;
2315 if (!word1(&u) && !(word0(&u) & 0xfffff))
2316 return nrv_alloc("Infinity", rve, 8);
2317 return nrv_alloc("NaN", rve, 3);
2318 }
2319 if (!dval(&u)) {
2320 *decpt = 1;
2321 return nrv_alloc("0", rve, 1);
2322 }
2323
2324 /* compute k = floor(log10(d)). The computation may leave k
2325 one too large, but should never leave k too small. */
2326 b = d2b(&u, &be, &bbits);
2327 if (b == NULL)
2328 goto failed_malloc;
2329 if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) {
2330 dval(&d2) = dval(&u);
2331 word0(&d2) &= Frac_mask1;
2332 word0(&d2) |= Exp_11;
2333
2334 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
2335 * log10(x) = log(x) / log(10)
2336 * ~=~ log(1.5)/log(10) + (x-1.5)/(1.5*log(10))
2337 * log10(d) = (i-Bias)*log(2)/log(10) + log10(d2)
2338 *
2339 * This suggests computing an approximation k to log10(d) by
2340 *
2341 * k = (i - Bias)*0.301029995663981
2342 * + ( (d2-1.5)*0.289529654602168 + 0.176091259055681 );
2343 *
2344 * We want k to be too large rather than too small.
2345 * The error in the first-order Taylor series approximation
2346 * is in our favor, so we just round up the constant enough
2347 * to compensate for any error in the multiplication of
2348 * (i - Bias) by 0.301029995663981; since |i - Bias| <= 1077,
2349 * and 1077 * 0.30103 * 2^-52 ~=~ 7.2e-14,
2350 * adding 1e-13 to the constant term more than suffices.
2351 * Hence we adjust the constant term to 0.1760912590558.
2352 * (We could get a more accurate k by invoking log10,
2353 * but this is probably not worthwhile.)
2354 */
2355
2356 i -= Bias;
2357 denorm = 0;
2358 }
2359 else {
2360 /* d is denormalized */
2361
2362 i = bbits + be + (Bias + (P-1) - 1);
2363 x = i > 32 ? word0(&u) << (64 - i) | word1(&u) >> (i - 32)
2364 : word1(&u) << (32 - i);
2365 dval(&d2) = x;
2366 word0(&d2) -= 31*Exp_msk1; /* adjust exponent */
2367 i -= (Bias + (P-1) - 1) + 1;
2368 denorm = 1;
2369 }
2370 ds = (dval(&d2)-1.5)*0.289529654602168 + 0.1760912590558 +
2371 i*0.301029995663981;
2372 k = (int)ds;
2373 if (ds < 0. && ds != k)
2374 k--; /* want k = floor(ds) */
2375 k_check = 1;
2376 if (k >= 0 && k <= Ten_pmax) {
2377 if (dval(&u) < tens[k])
2378 k--;
2379 k_check = 0;
2380 }
2381 j = bbits - i - 1;
2382 if (j >= 0) {
2383 b2 = 0;
2384 s2 = j;
2385 }
2386 else {
2387 b2 = -j;
2388 s2 = 0;
2389 }
2390 if (k >= 0) {
2391 b5 = 0;
2392 s5 = k;
2393 s2 += k;
2394 }
2395 else {
2396 b2 -= k;
2397 b5 = -k;
2398 s5 = 0;
2399 }
2400 if (mode < 0 || mode > 9)
2401 mode = 0;
2402
2403 try_quick = 1;
2404
2405 if (mode > 5) {
2406 mode -= 4;
2407 try_quick = 0;
2408 }
2409 leftright = 1;
2410 ilim = ilim1 = -1; /* Values for cases 0 and 1; done here to */
2411 /* silence erroneous "gcc -Wall" warning. */
2412 switch(mode) {
2413 case 0:
2414 case 1:
2415 i = 18;
2416 ndigits = 0;
2417 break;
2418 case 2:
2419 leftright = 0;
2420 /* fall through */
2421 case 4:
2422 if (ndigits <= 0)
2423 ndigits = 1;
2424 ilim = ilim1 = i = ndigits;
2425 break;
2426 case 3:
2427 leftright = 0;
2428 /* fall through */
2429 case 5:
2430 i = ndigits + k + 1;
2431 ilim = i;
2432 ilim1 = i - 1;
2433 if (i <= 0)
2434 i = 1;
2435 }
2436 s0 = rv_alloc(i);
2437 if (s0 == NULL)
2438 goto failed_malloc;
2439 s = s0;
2440
2441
2442 if (ilim >= 0 && ilim <= Quick_max && try_quick) {
2443
2444 /* Try to get by with floating-point arithmetic. */
2445
2446 i = 0;
2447 dval(&d2) = dval(&u);
2448 k0 = k;
2449 ilim0 = ilim;
2450 ieps = 2; /* conservative */
2451 if (k > 0) {
2452 ds = tens[k&0xf];
2453 j = k >> 4;
2454 if (j & Bletch) {
2455 /* prevent overflows */
2456 j &= Bletch - 1;
2457 dval(&u) /= bigtens[n_bigtens-1];
2458 ieps++;
2459 }
2460 for(; j; j >>= 1, i++)
2461 if (j & 1) {
2462 ieps++;
2463 ds *= bigtens[i];
2464 }
2465 dval(&u) /= ds;
2466 }
2467 else if ((j1 = -k)) {
2468 dval(&u) *= tens[j1 & 0xf];
2469 for(j = j1 >> 4; j; j >>= 1, i++)
2470 if (j & 1) {
2471 ieps++;
2472 dval(&u) *= bigtens[i];
2473 }
2474 }
2475 if (k_check && dval(&u) < 1. && ilim > 0) {
2476 if (ilim1 <= 0)
2477 goto fast_failed;
2478 ilim = ilim1;
2479 k--;
2480 dval(&u) *= 10.;
2481 ieps++;
2482 }
2483 dval(&eps) = ieps*dval(&u) + 7.;
2484 word0(&eps) -= (P-1)*Exp_msk1;
2485 if (ilim == 0) {
2486 S = mhi = 0;
2487 dval(&u) -= 5.;
2488 if (dval(&u) > dval(&eps))
2489 goto one_digit;
2490 if (dval(&u) < -dval(&eps))
2491 goto no_digits;
2492 goto fast_failed;
2493 }
2494 if (leftright) {
2495 /* Use Steele & White method of only
2496 * generating digits needed.
2497 */
2498 dval(&eps) = 0.5/tens[ilim-1] - dval(&eps);
2499 for(i = 0;;) {
2500 L = (Long)dval(&u);
2501 dval(&u) -= L;
2502 *s++ = '0' + (int)L;
2503 if (dval(&u) < dval(&eps))
2504 goto ret1;
2505 if (1. - dval(&u) < dval(&eps))
2506 goto bump_up;
2507 if (++i >= ilim)
2508 break;
2509 dval(&eps) *= 10.;
2510 dval(&u) *= 10.;
2511 }
2512 }
2513 else {
2514 /* Generate ilim digits, then fix them up. */
2515 dval(&eps) *= tens[ilim-1];
2516 for(i = 1;; i++, dval(&u) *= 10.) {
2517 L = (Long)(dval(&u));
2518 if (!(dval(&u) -= L))
2519 ilim = i;
2520 *s++ = '0' + (int)L;
2521 if (i == ilim) {
2522 if (dval(&u) > 0.5 + dval(&eps))
2523 goto bump_up;
2524 else if (dval(&u) < 0.5 - dval(&eps)) {
2525 while(*--s == '0');
2526 s++;
2527 goto ret1;
2528 }
2529 break;
2530 }
2531 }
2532 }
2533 fast_failed:
2534 s = s0;
2535 dval(&u) = dval(&d2);
2536 k = k0;
2537 ilim = ilim0;
2538 }
2539
2540 /* Do we have a "small" integer? */
2541
2542 if (be >= 0 && k <= Int_max) {
2543 /* Yes. */
2544 ds = tens[k];
2545 if (ndigits < 0 && ilim <= 0) {
2546 S = mhi = 0;
2547 if (ilim < 0 || dval(&u) <= 5*ds)
2548 goto no_digits;
2549 goto one_digit;
2550 }
2551 for(i = 1;; i++, dval(&u) *= 10.) {
2552 L = (Long)(dval(&u) / ds);
2553 dval(&u) -= L*ds;
2554 *s++ = '0' + (int)L;
2555 if (!dval(&u)) {
2556 break;
2557 }
2558 if (i == ilim) {
2559 dval(&u) += dval(&u);
2560 if (dval(&u) > ds || (dval(&u) == ds && L & 1)) {
2561 bump_up:
2562 while(*--s == '9')
2563 if (s == s0) {
2564 k++;
2565 *s = '0';
2566 break;
2567 }
2568 ++*s++;
2569 }
2570 else {
2571 /* Strip trailing zeros. This branch was missing from the
2572 original dtoa.c, leading to surplus trailing zeros in
2573 some cases. See bugs.python.org/issue40780. */
2574 while (s > s0 && s[-1] == '0') {
2575 --s;
2576 }
2577 }
2578 break;
2579 }
2580 }
2581 goto ret1;
2582 }
2583
2584 m2 = b2;
2585 m5 = b5;
2586 if (leftright) {
2587 i =
2588 denorm ? be + (Bias + (P-1) - 1 + 1) :
2589 1 + P - bbits;
2590 b2 += i;
2591 s2 += i;
2592 mhi = i2b(1);
2593 if (mhi == NULL)
2594 goto failed_malloc;
2595 }
2596 if (m2 > 0 && s2 > 0) {
2597 i = m2 < s2 ? m2 : s2;
2598 b2 -= i;
2599 m2 -= i;
2600 s2 -= i;
2601 }
2602 if (b5 > 0) {
2603 if (leftright) {
2604 if (m5 > 0) {
2605 mhi = pow5mult(mhi, m5);
2606 if (mhi == NULL)
2607 goto failed_malloc;
2608 b1 = mult(mhi, b);
2609 Bfree(b);
2610 b = b1;
2611 if (b == NULL)
2612 goto failed_malloc;
2613 }
2614 if ((j = b5 - m5)) {
2615 b = pow5mult(b, j);
2616 if (b == NULL)
2617 goto failed_malloc;
2618 }
2619 }
2620 else {
2621 b = pow5mult(b, b5);
2622 if (b == NULL)
2623 goto failed_malloc;
2624 }
2625 }
2626 S = i2b(1);
2627 if (S == NULL)
2628 goto failed_malloc;
2629 if (s5 > 0) {
2630 S = pow5mult(S, s5);
2631 if (S == NULL)
2632 goto failed_malloc;
2633 }
2634
2635 /* Check for special case that d is a normalized power of 2. */
2636
2637 spec_case = 0;
2638 if ((mode < 2 || leftright)
2639 ) {
2640 if (!word1(&u) && !(word0(&u) & Bndry_mask)
2641 && word0(&u) & (Exp_mask & ~Exp_msk1)
2642 ) {
2643 /* The special case */
2644 b2 += Log2P;
2645 s2 += Log2P;
2646 spec_case = 1;
2647 }
2648 }
2649
2650 /* Arrange for convenient computation of quotients:
2651 * shift left if necessary so divisor has 4 leading 0 bits.
2652 *
2653 * Perhaps we should just compute leading 28 bits of S once
2654 * and for all and pass them and a shift to quorem, so it
2655 * can do shifts and ors to compute the numerator for q.
2656 */
2657 #define iInc 28
2658 i = dshift(S, s2);
2659 b2 += i;
2660 m2 += i;
2661 s2 += i;
2662 if (b2 > 0) {
2663 b = lshift(b, b2);
2664 if (b == NULL)
2665 goto failed_malloc;
2666 }
2667 if (s2 > 0) {
2668 S = lshift(S, s2);
2669 if (S == NULL)
2670 goto failed_malloc;
2671 }
2672 if (k_check) {
2673 if (cmp(b,S) < 0) {
2674 k--;
2675 b = multadd(b, 10, 0); /* we botched the k estimate */
2676 if (b == NULL)
2677 goto failed_malloc;
2678 if (leftright) {
2679 mhi = multadd(mhi, 10, 0);
2680 if (mhi == NULL)
2681 goto failed_malloc;
2682 }
2683 ilim = ilim1;
2684 }
2685 }
2686 if (ilim <= 0 && (mode == 3 || mode == 5)) {
2687 if (ilim < 0) {
2688 /* no digits, fcvt style */
2689 no_digits:
2690 k = -1 - ndigits;
2691 goto ret;
2692 }
2693 else {
2694 S = multadd(S, 5, 0);
2695 if (S == NULL)
2696 goto failed_malloc;
2697 if (cmp(b, S) <= 0)
2698 goto no_digits;
2699 }
2700 one_digit:
2701 *s++ = '1';
2702 k++;
2703 goto ret;
2704 }
2705 if (leftright) {
2706 if (m2 > 0) {
2707 mhi = lshift(mhi, m2);
2708 if (mhi == NULL)
2709 goto failed_malloc;
2710 }
2711
2712 /* Compute mlo -- check for special case
2713 * that d is a normalized power of 2.
2714 */
2715
2716 mlo = mhi;
2717 if (spec_case) {
2718 mhi = Balloc(mhi->k);
2719 if (mhi == NULL)
2720 goto failed_malloc;
2721 Bcopy(mhi, mlo);
2722 mhi = lshift(mhi, Log2P);
2723 if (mhi == NULL)
2724 goto failed_malloc;
2725 }
2726
2727 for(i = 1;;i++) {
2728 dig = quorem(b,S) + '0';
2729 /* Do we yet have the shortest decimal string
2730 * that will round to d?
2731 */
2732 j = cmp(b, mlo);
2733 delta = diff(S, mhi);
2734 if (delta == NULL)
2735 goto failed_malloc;
2736 j1 = delta->sign ? 1 : cmp(b, delta);
2737 Bfree(delta);
2738 if (j1 == 0 && mode != 1 && !(word1(&u) & 1)
2739 ) {
2740 if (dig == '9')
2741 goto round_9_up;
2742 if (j > 0)
2743 dig++;
2744 *s++ = dig;
2745 goto ret;
2746 }
2747 if (j < 0 || (j == 0 && mode != 1
2748 && !(word1(&u) & 1)
2749 )) {
2750 if (!b->x[0] && b->wds <= 1) {
2751 goto accept_dig;
2752 }
2753 if (j1 > 0) {
2754 b = lshift(b, 1);
2755 if (b == NULL)
2756 goto failed_malloc;
2757 j1 = cmp(b, S);
2758 if ((j1 > 0 || (j1 == 0 && dig & 1))
2759 && dig++ == '9')
2760 goto round_9_up;
2761 }
2762 accept_dig:
2763 *s++ = dig;
2764 goto ret;
2765 }
2766 if (j1 > 0) {
2767 if (dig == '9') { /* possible if i == 1 */
2768 round_9_up:
2769 *s++ = '9';
2770 goto roundoff;
2771 }
2772 *s++ = dig + 1;
2773 goto ret;
2774 }
2775 *s++ = dig;
2776 if (i == ilim)
2777 break;
2778 b = multadd(b, 10, 0);
2779 if (b == NULL)
2780 goto failed_malloc;
2781 if (mlo == mhi) {
2782 mlo = mhi = multadd(mhi, 10, 0);
2783 if (mlo == NULL)
2784 goto failed_malloc;
2785 }
2786 else {
2787 mlo = multadd(mlo, 10, 0);
2788 if (mlo == NULL)
2789 goto failed_malloc;
2790 mhi = multadd(mhi, 10, 0);
2791 if (mhi == NULL)
2792 goto failed_malloc;
2793 }
2794 }
2795 }
2796 else
2797 for(i = 1;; i++) {
2798 *s++ = dig = quorem(b,S) + '0';
2799 if (!b->x[0] && b->wds <= 1) {
2800 goto ret;
2801 }
2802 if (i >= ilim)
2803 break;
2804 b = multadd(b, 10, 0);
2805 if (b == NULL)
2806 goto failed_malloc;
2807 }
2808
2809 /* Round off last digit */
2810
2811 b = lshift(b, 1);
2812 if (b == NULL)
2813 goto failed_malloc;
2814 j = cmp(b, S);
2815 if (j > 0 || (j == 0 && dig & 1)) {
2816 roundoff:
2817 while(*--s == '9')
2818 if (s == s0) {
2819 k++;
2820 *s++ = '1';
2821 goto ret;
2822 }
2823 ++*s++;
2824 }
2825 else {
2826 while(*--s == '0');
2827 s++;
2828 }
2829 ret:
2830 Bfree(S);
2831 if (mhi) {
2832 if (mlo && mlo != mhi)
2833 Bfree(mlo);
2834 Bfree(mhi);
2835 }
2836 ret1:
2837 Bfree(b);
2838 *s = 0;
2839 *decpt = k + 1;
2840 if (rve)
2841 *rve = s;
2842 return s0;
2843 failed_malloc:
2844 if (S)
2845 Bfree(S);
2846 if (mlo && mlo != mhi)
2847 Bfree(mlo);
2848 if (mhi)
2849 Bfree(mhi);
2850 if (b)
2851 Bfree(b);
2852 if (s0)
2853 _Py_dg_freedtoa(s0);
2854 return NULL;
2855 }
2856 #ifdef __cplusplus
2857 }
2858 #endif
2859
2860 #endif // _PY_SHORT_FLOAT_REPR == 1
2861