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