Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(308)

Side by Side Diff: base/third_party/dmg_fp/dtoa.cc

Issue 385503002: Fixes for re-enabling more MSVC level 4 warnings: base/third_party/dmg_fp/ edition (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/third_party/dmg_fp/README.chromium ('k') | base/third_party/dmg_fp/g_fmt.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /**************************************************************** 1 /****************************************************************
2 * 2 *
3 * The author of this software is David M. Gay. 3 * The author of this software is David M. Gay.
4 * 4 *
5 * Copyright (c) 1991, 2000, 2001 by Lucent Technologies. 5 * Copyright (c) 1991, 2000, 2001 by Lucent Technologies.
6 * 6 *
7 * Permission to use, copy, modify, and distribute this software for any 7 * Permission to use, copy, modify, and distribute this software for any
8 * purpose without fee is hereby granted, provided that this entire notice 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 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 10 * or modification of this software and in all copies of the supporting
(...skipping 530 matching lines...) Expand 10 before | Expand all | Expand 10 after
541 { 541 {
542 int x; 542 int x;
543 Bigint *rv; 543 Bigint *rv;
544 #ifndef Omit_Private_Memory 544 #ifndef Omit_Private_Memory
545 unsigned int len; 545 unsigned int len;
546 #endif 546 #endif
547 547
548 ACQUIRE_DTOA_LOCK(0); 548 ACQUIRE_DTOA_LOCK(0);
549 /* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */ 549 /* The k > Kmax case does not need ACQUIRE_DTOA_LOCK(0), */
550 /* but this case seems very unlikely. */ 550 /* but this case seems very unlikely. */
551 » if (k <= Kmax && (rv = freelist[k])) 551 » if (k <= Kmax && freelist[k]) {
552 » » rv = freelist[k];
552 freelist[k] = rv->next; 553 freelist[k] = rv->next;
554 }
553 else { 555 else {
554 x = 1 << k; 556 x = 1 << k;
555 #ifdef Omit_Private_Memory 557 #ifdef Omit_Private_Memory
556 rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong)); 558 rv = (Bigint *)MALLOC(sizeof(Bigint) + (x-1)*sizeof(ULong));
557 #else 559 #else
558 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1 ) 560 len = (sizeof(Bigint) + (x-1)*sizeof(ULong) + sizeof(double) - 1 )
559 /sizeof(double); 561 /sizeof(double);
560 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) { 562 if (k <= Kmax && pmem_next - private_mem + len <= PRIVATE_mem) {
561 rv = (Bigint*)pmem_next; 563 rv = (Bigint*)pmem_next;
562 pmem_next += len; 564 pmem_next += len;
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 c = Balloc(k); 829 c = Balloc(k);
828 for(x = c->x, xa = x + wc; x < xa; x++) 830 for(x = c->x, xa = x + wc; x < xa; x++)
829 *x = 0; 831 *x = 0;
830 xa = a->x; 832 xa = a->x;
831 xae = xa + wa; 833 xae = xa + wa;
832 xb = b->x; 834 xb = b->x;
833 xbe = xb + wb; 835 xbe = xb + wb;
834 xc0 = c->x; 836 xc0 = c->x;
835 #ifdef ULLong 837 #ifdef ULLong
836 for(; xb < xbe; xc0++) { 838 for(; xb < xbe; xc0++) {
837 » » if ((y = *xb++)) { 839 » » y = *xb++;
840 » » if (y) {
838 x = xa; 841 x = xa;
839 xc = xc0; 842 xc = xc0;
840 carry = 0; 843 carry = 0;
841 do { 844 do {
842 z = *x++ * (ULLong)y + *xc + carry; 845 z = *x++ * (ULLong)y + *xc + carry;
843 carry = z >> 32; 846 carry = z >> 32;
844 *xc++ = z & FFFFFFFF; 847 *xc++ = z & FFFFFFFF;
845 } 848 }
846 while(x < xae); 849 while(x < xae);
847 *xc = carry; 850 *xc = carry;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
909 #ifdef KR_headers 912 #ifdef KR_headers
910 (b, k) Bigint *b; int k; 913 (b, k) Bigint *b; int k;
911 #else 914 #else
912 (Bigint *b, int k) 915 (Bigint *b, int k)
913 #endif 916 #endif
914 { 917 {
915 Bigint *b1, *p5, *p51; 918 Bigint *b1, *p5, *p51;
916 int i; 919 int i;
917 static int p05[3] = { 5, 25, 125 }; 920 static int p05[3] = { 5, 25, 125 };
918 921
919 » if ((i = k & 3)) 922 » i = k & 3;
923 » if (i)
920 b = multadd(b, p05[i-1], 0); 924 b = multadd(b, p05[i-1], 0);
921 925
922 if (!(k >>= 2)) 926 if (!(k >>= 2))
923 return b; 927 return b;
924 » if (!(p5 = p5s)) { 928 » p5 = p5s;
929 » if (!p5) {
925 /* first time */ 930 /* first time */
926 #ifdef MULTIPLE_THREADS 931 #ifdef MULTIPLE_THREADS
927 ACQUIRE_DTOA_LOCK(1); 932 ACQUIRE_DTOA_LOCK(1);
928 » » if (!(p5 = p5s)) { 933 » » p5 = p5s;
934 » » if (!p5) {
929 p5 = p5s = i2b(625); 935 p5 = p5s = i2b(625);
930 p5->next = 0; 936 p5->next = 0;
931 } 937 }
932 FREE_DTOA_LOCK(1); 938 FREE_DTOA_LOCK(1);
933 #else 939 #else
934 p5 = p5s = i2b(625); 940 p5 = p5s = i2b(625);
935 p5->next = 0; 941 p5->next = 0;
936 #endif 942 #endif
937 } 943 }
938 for(;;) { 944 for(;;) {
939 if (k & 1) { 945 if (k & 1) {
940 b1 = mult(b, p5); 946 b1 = mult(b, p5);
941 Bfree(b); 947 Bfree(b);
942 b = b1; 948 b = b1;
943 } 949 }
944 if (!(k >>= 1)) 950 if (!(k >>= 1))
945 break; 951 break;
946 » » if (!(p51 = p5->next)) { 952 » » p51 = p5->next;
953 » » if (!p51) {
947 #ifdef MULTIPLE_THREADS 954 #ifdef MULTIPLE_THREADS
948 ACQUIRE_DTOA_LOCK(1); 955 ACQUIRE_DTOA_LOCK(1);
949 » » » if (!(p51 = p5->next)) { 956 » » » p51 = p5->next;
957 » » » if (!p51) {
950 p51 = p5->next = mult(p5,p5); 958 p51 = p5->next = mult(p5,p5);
951 p51->next = 0; 959 p51->next = 0;
952 } 960 }
953 FREE_DTOA_LOCK(1); 961 FREE_DTOA_LOCK(1);
954 #else 962 #else
955 p51 = p5->next = mult(p5,p5); 963 p51 = p5->next = mult(p5,p5);
956 p51->next = 0; 964 p51->next = 0;
957 #endif 965 #endif
958 } 966 }
959 p5 = p51; 967 p5 = p51;
(...skipping 30 matching lines...) Expand all
990 xe = x + b->wds; 998 xe = x + b->wds;
991 #ifdef Pack_32 999 #ifdef Pack_32
992 if (k &= 0x1f) { 1000 if (k &= 0x1f) {
993 k1 = 32 - k; 1001 k1 = 32 - k;
994 z = 0; 1002 z = 0;
995 do { 1003 do {
996 *x1++ = *x << k | z; 1004 *x1++ = *x << k | z;
997 z = *x++ >> k1; 1005 z = *x++ >> k1;
998 } 1006 }
999 while(x < xe); 1007 while(x < xe);
1000 » » if ((*x1 = z)) 1008 » » *x1 = z;
1009 » » if (*x1)
1001 ++n1; 1010 ++n1;
1002 } 1011 }
1003 #else 1012 #else
1004 if (k &= 0xf) { 1013 if (k &= 0xf) {
1005 k1 = 16 - k; 1014 k1 = 16 - k;
1006 z = 0; 1015 z = 0;
1007 do { 1016 do {
1008 *x1++ = *x << k & 0xffff | z; 1017 *x1++ = *x << k & 0xffff | z;
1009 z = *x++ >> k1; 1018 z = *x++ >> k1;
1010 } 1019 }
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 x = b->x; 1301 x = b->x;
1293 1302
1294 z = d0 & Frac_mask; 1303 z = d0 & Frac_mask;
1295 d0 &= 0x7fffffff; /* clear sign bit, which we ignore */ 1304 d0 &= 0x7fffffff; /* clear sign bit, which we ignore */
1296 #ifdef Sudden_Underflow 1305 #ifdef Sudden_Underflow
1297 de = (int)(d0 >> Exp_shift); 1306 de = (int)(d0 >> Exp_shift);
1298 #ifndef IBM 1307 #ifndef IBM
1299 z |= Exp_msk11; 1308 z |= Exp_msk11;
1300 #endif 1309 #endif
1301 #else 1310 #else
1302 » if ((de = (int)(d0 >> Exp_shift))) 1311 » de = (int)(d0 >> Exp_shift);
1312 » if (de)
1303 z |= Exp_msk1; 1313 z |= Exp_msk1;
1304 #endif 1314 #endif
1305 #ifdef Pack_32 1315 #ifdef Pack_32
1306 » if ((y = d1)) { 1316 » y = d1;
1307 » » if ((k = lo0bits(&y))) { 1317 » if (y) {
1318 » » k = lo0bits(&y);
1319 » » if (k) {
1308 x[0] = y | z << (32 - k); 1320 x[0] = y | z << (32 - k);
1309 z >>= k; 1321 z >>= k;
1310 } 1322 }
1311 else 1323 else
1312 x[0] = y; 1324 x[0] = y;
1325 x[1] = z;
1326 b->wds = x[1] ? 2 : 1;
1313 #ifndef Sudden_Underflow 1327 #ifndef Sudden_Underflow
1314 » » i = 1328 » » i = b->wds;
1315 #endif 1329 #endif
1316 b->wds = (x[1] = z) ? 2 : 1;
1317 } 1330 }
1318 else { 1331 else {
1319 k = lo0bits(&z); 1332 k = lo0bits(&z);
1320 x[0] = z; 1333 x[0] = z;
1321 #ifndef Sudden_Underflow 1334 #ifndef Sudden_Underflow
1322 i = 1335 i =
1323 #endif 1336 #endif
1324 b->wds = 1; 1337 b->wds = 1;
1325 k += 32; 1338 k += 32;
1326 } 1339 }
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
1529 match 1542 match
1530 #ifdef KR_headers 1543 #ifdef KR_headers
1531 (sp, t) char **sp, *t; 1544 (sp, t) char **sp, *t;
1532 #else 1545 #else
1533 (CONST char **sp, CONST char *t) 1546 (CONST char **sp, CONST char *t)
1534 #endif 1547 #endif
1535 { 1548 {
1536 int c, d; 1549 int c, d;
1537 CONST char *s = *sp; 1550 CONST char *s = *sp;
1538 1551
1539 » while((d = *t++)) { 1552 » for(d = *t++; d; d = *t++) {
1540 if ((c = *++s) >= 'A' && c <= 'Z') 1553 if ((c = *++s) >= 'A' && c <= 'Z')
1541 c += 'a' - 'A'; 1554 c += 'a' - 'A';
1542 if (c != d) 1555 if (c != d)
1543 return 0; 1556 return 0;
1544 } 1557 }
1545 *sp = s + 1; 1558 *sp = s + 1;
1546 return 1; 1559 return 1;
1547 } 1560 }
1548 1561
1549 #ifndef No_Hex_NaN 1562 #ifndef No_Hex_NaN
1550 static void 1563 static void
1551 hexnan 1564 hexnan
1552 #ifdef KR_headers 1565 #ifdef KR_headers
1553 (rvp, sp) U *rvp; CONST char **sp; 1566 (rvp, sp) U *rvp; CONST char **sp;
1554 #else 1567 #else
1555 (U *rvp, CONST char **sp) 1568 (U *rvp, CONST char **sp)
1556 #endif 1569 #endif
1557 { 1570 {
1558 ULong c, x[2]; 1571 ULong c, x[2];
1559 CONST char *s; 1572 CONST char *s;
1560 int c1, havedig, udx0, xshift; 1573 int c1, havedig, udx0, xshift;
1561 1574
1562 if (!hexdig['0']) 1575 if (!hexdig['0'])
1563 hexdig_init(); 1576 hexdig_init();
1564 x[0] = x[1] = 0; 1577 x[0] = x[1] = 0;
1565 havedig = xshift = 0; 1578 havedig = xshift = 0;
1566 udx0 = 1; 1579 udx0 = 1;
1567 s = *sp; 1580 s = *sp;
1568 /* allow optional initial 0x or 0X */ 1581 /* allow optional initial 0x or 0X */
1569 » while((c = *(CONST unsigned char*)(s+1)) && c <= ' ') 1582 » for(c = *(CONST unsigned char*)(s+1); c && c <= ' '; c = *(CONST unsigne d char*)(s+1))
1570 ++s; 1583 ++s;
1571 if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X')) 1584 if (s[1] == '0' && (s[2] == 'x' || s[2] == 'X'))
1572 s += 2; 1585 s += 2;
1573 » while((c = *(CONST unsigned char*)++s)) { 1586 » for(c = *(CONST unsigned char*)++s; c; c = *(CONST unsigned char*)++s) {
1574 » » if ((c1 = hexdig[c])) 1587 » » c1 = hexdig[c];
1588 » » if (c1)
1575 c = c1 & 0xf; 1589 c = c1 & 0xf;
1576 else if (c <= ' ') { 1590 else if (c <= ' ') {
1577 if (udx0 && havedig) { 1591 if (udx0 && havedig) {
1578 udx0 = 0; 1592 udx0 = 0;
1579 xshift = 1; 1593 xshift = 1;
1580 } 1594 }
1581 continue; 1595 continue;
1582 } 1596 }
1583 #ifdef GDTOA_NON_PEDANTIC_NANCHECK 1597 #ifdef GDTOA_NON_PEDANTIC_NANCHECK
1584 else if (/*(*/ c == ')' && havedig) { 1598 else if (/*(*/ c == ')' && havedig) {
1585 *sp = s + 1; 1599 *sp = s + 1;
1586 break; 1600 break;
1587 } 1601 }
1588 else 1602 else
1589 return; /* invalid form: don't change *sp */ 1603 return; /* invalid form: don't change *sp */
1590 #else 1604 #else
1591 else { 1605 else {
1592 do { 1606 do {
1593 if (/*(*/ c == ')') { 1607 if (/*(*/ c == ')') {
1594 *sp = s + 1; 1608 *sp = s + 1;
1595 break; 1609 break;
1596 } 1610 }
1597 » » » » } while((c = *++s)); 1611 » » » » c = *++s;
1612 » » » » } while(c);
1598 break; 1613 break;
1599 } 1614 }
1600 #endif 1615 #endif
1601 havedig = 1; 1616 havedig = 1;
1602 if (xshift) { 1617 if (xshift) {
1603 xshift = 0; 1618 xshift = 0;
1604 x[0] = x[1]; 1619 x[0] = x[1];
1605 x[1] = 0; 1620 x[1] = 0;
1606 } 1621 }
1607 if (udx0) 1622 if (udx0)
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after
2321 } 2336 }
2322 i = dshift(d, d2); 2337 i = dshift(d, d2);
2323 if ((b2 += i) > 0) 2338 if ((b2 += i) > 0)
2324 b = lshift(b, b2); 2339 b = lshift(b, b2);
2325 if ((d2 += i) > 0) 2340 if ((d2 += i) > 0)
2326 d = lshift(d, d2); 2341 d = lshift(d, d2);
2327 2342
2328 /* Now b/d = exactly half-way between the two floating-point values */ 2343 /* Now b/d = exactly half-way between the two floating-point values */
2329 /* on either side of the input string. Compute first digit of b/d. */ 2344 /* on either side of the input string. Compute first digit of b/d. */
2330 2345
2331 » if (!(dig = quorem(b,d))) { 2346 » dig = quorem(b,d);
2347 » if (!dig) {
2332 b = multadd(b, 10, 0); /* very unlikely */ 2348 b = multadd(b, 10, 0); /* very unlikely */
2333 dig = quorem(b,d); 2349 dig = quorem(b,d);
2334 } 2350 }
2335 2351
2336 /* Compare b/d with s0 */ 2352 /* Compare b/d with s0 */
2337 2353
2338 for(i = 0; i < nd0; ) { 2354 for(i = 0; i < nd0; ) {
2339 » » if ((dd = s0[i++] - '0' - dig)) 2355 » » dd = s0[i++] - '0' - dig;
2356 » » if (dd)
2340 goto ret; 2357 goto ret;
2341 if (!b->x[0] && b->wds == 1) { 2358 if (!b->x[0] && b->wds == 1) {
2342 if (i < nd) 2359 if (i < nd)
2343 dd = 1; 2360 dd = 1;
2344 goto ret; 2361 goto ret;
2345 } 2362 }
2346 b = multadd(b, 10, 0); 2363 b = multadd(b, 10, 0);
2347 dig = quorem(b,d); 2364 dig = quorem(b,d);
2348 } 2365 }
2349 for(j = bc->dp1; i++ < nd;) { 2366 for(j = bc->dp1; i++ < nd;) {
2350 » » if ((dd = s0[j++] - '0' - dig)) 2367 » » dd = s0[j++] - '0' - dig;
2368 » » if (dd)
2351 goto ret; 2369 goto ret;
2352 if (!b->x[0] && b->wds == 1) { 2370 if (!b->x[0] && b->wds == 1) {
2353 if (i < nd) 2371 if (i < nd)
2354 dd = 1; 2372 dd = 1;
2355 goto ret; 2373 goto ret;
2356 } 2374 }
2357 b = multadd(b, 10, 0); 2375 b = multadd(b, 10, 0);
2358 dig = quorem(b,d); 2376 dig = quorem(b,d);
2359 } 2377 }
2360 if (b->x[0] || b->wds > 1) 2378 if (b->x[0] || b->wds > 1)
(...skipping 379 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 else 2758 else
2741 if (bc.rounding != 2) 2759 if (bc.rounding != 2)
2742 bc.rounding = 0; 2760 bc.rounding = 0;
2743 } 2761 }
2744 #endif 2762 #endif
2745 #endif /*IEEE_Arith*/ 2763 #endif /*IEEE_Arith*/
2746 2764
2747 /* Get starting approximation = rv * 10**e1 */ 2765 /* Get starting approximation = rv * 10**e1 */
2748 2766
2749 if (e1 > 0) { 2767 if (e1 > 0) {
2750 » » if ((i = e1 & 15)) 2768 » » i = e1 & 15;
2769 » » if (i)
2751 dval(&rv) *= tens[i]; 2770 dval(&rv) *= tens[i];
2752 if (e1 &= ~15) { 2771 if (e1 &= ~15) {
2753 if (e1 > DBL_MAX_10_EXP) { 2772 if (e1 > DBL_MAX_10_EXP) {
2754 ovfl: 2773 ovfl:
2755 #ifndef NO_ERRNO 2774 #ifndef NO_ERRNO
2756 errno = ERANGE; 2775 errno = ERANGE;
2757 #endif 2776 #endif
2758 /* Can't trust HUGE_VAL */ 2777 /* Can't trust HUGE_VAL */
2759 #ifdef IEEE_Arith 2778 #ifdef IEEE_Arith
2760 #ifdef Honor_FLT_ROUNDS 2779 #ifdef Honor_FLT_ROUNDS
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2798 /* (Can't trust DBL_MAX) */ 2817 /* (Can't trust DBL_MAX) */
2799 word0(&rv) = Big0; 2818 word0(&rv) = Big0;
2800 word1(&rv) = Big1; 2819 word1(&rv) = Big1;
2801 } 2820 }
2802 else 2821 else
2803 word0(&rv) += P*Exp_msk1; 2822 word0(&rv) += P*Exp_msk1;
2804 } 2823 }
2805 } 2824 }
2806 else if (e1 < 0) { 2825 else if (e1 < 0) {
2807 e1 = -e1; 2826 e1 = -e1;
2808 » » if ((i = e1 & 15)) 2827 » » i = e1 & 15;
2828 » » if (i)
2809 dval(&rv) /= tens[i]; 2829 dval(&rv) /= tens[i];
2810 if (e1 >>= 4) { 2830 if (e1 >>= 4) {
2811 if (e1 >= 1 << n_bigtens) 2831 if (e1 >= 1 << n_bigtens)
2812 goto undfl; 2832 goto undfl;
2813 #ifdef Avoid_Underflow 2833 #ifdef Avoid_Underflow
2814 if (e1 & Scale_Bit) 2834 if (e1 & Scale_Bit)
2815 bc.scale = 2*P; 2835 bc.scale = 2*P;
2816 for(j = 0; e1 > 0; j++, e1 >>= 1) 2836 for(j = 0; e1 > 0; j++, e1 >>= 1)
2817 if (e1 & 1) 2837 if (e1 & 1)
2818 dval(&rv) *= tinytens[j]; 2838 dval(&rv) *= tinytens[j];
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
3449 static char * 3469 static char *
3450 #ifdef KR_headers 3470 #ifdef KR_headers
3451 nrv_alloc(s, rve, n) char *s, **rve; int n; 3471 nrv_alloc(s, rve, n) char *s, **rve; int n;
3452 #else 3472 #else
3453 nrv_alloc(CONST char *s, char **rve, int n) 3473 nrv_alloc(CONST char *s, char **rve, int n)
3454 #endif 3474 #endif
3455 { 3475 {
3456 char *rv, *t; 3476 char *rv, *t;
3457 3477
3458 t = rv = rv_alloc(n); 3478 t = rv = rv_alloc(n);
3459 » while((*t = *s++)) t++; 3479 » for(*t = *s++; *t; *t = *s++) t++;
3460 if (rve) 3480 if (rve)
3461 *rve = t; 3481 *rve = t;
3462 return rv; 3482 return rv;
3463 } 3483 }
3464 3484
3465 /* freedtoa(s) must be used to free values s returned by dtoa 3485 /* freedtoa(s) must be used to free values s returned by dtoa
3466 * when MULTIPLE_THREADS is #defined. It should be used in all cases, 3486 * when MULTIPLE_THREADS is #defined. It should be used in all cases,
3467 * but for consistency with earlier versions of dtoa, it is optional 3487 * but for consistency with earlier versions of dtoa, it is optional
3468 * when MULTIPLE_THREADS is not defined. 3488 * when MULTIPLE_THREADS is not defined.
3469 */ 3489 */
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
3638 if (Rounding >= 2) { 3658 if (Rounding >= 2) {
3639 if (*sign) 3659 if (*sign)
3640 Rounding = Rounding == 2 ? 0 : 2; 3660 Rounding = Rounding == 2 ? 0 : 2;
3641 else 3661 else
3642 if (Rounding != 2) 3662 if (Rounding != 2)
3643 Rounding = 0; 3663 Rounding = 0;
3644 } 3664 }
3645 #endif 3665 #endif
3646 3666
3647 b = d2b(&u, &be, &bbits); 3667 b = d2b(&u, &be, &bbits);
3648 #ifdef Sudden_Underflow
3649 i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)); 3668 i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1));
3650 #else 3669 #ifndef Sudden_Underflow
3651 » if ((i = (int)(word0(&u) >> Exp_shift1 & (Exp_mask>>Exp_shift1)))) { 3670 » if (i) {
3652 #endif 3671 #endif
3653 dval(&d2) = dval(&u); 3672 dval(&d2) = dval(&u);
3654 word0(&d2) &= Frac_mask1; 3673 word0(&d2) &= Frac_mask1;
3655 word0(&d2) |= Exp_11; 3674 word0(&d2) |= Exp_11;
3656 #ifdef IBM 3675 #ifdef IBM
3657 if (j = 11 - hi0bits(word0(&d2) & Frac_mask)) 3676 if (j = 11 - hi0bits(word0(&d2) & Frac_mask))
3658 dval(&d2) /= 1 << j; 3677 dval(&d2) /= 1 << j;
3659 #endif 3678 #endif
3660 3679
3661 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5 3680 /* log(x) ~=~ log(1.5) + (x-1.5)/1.5
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
3796 dval(&u) /= bigtens[n_bigtens-1]; 3815 dval(&u) /= bigtens[n_bigtens-1];
3797 ieps++; 3816 ieps++;
3798 } 3817 }
3799 for(; j; j >>= 1, i++) 3818 for(; j; j >>= 1, i++)
3800 if (j & 1) { 3819 if (j & 1) {
3801 ieps++; 3820 ieps++;
3802 ds *= bigtens[i]; 3821 ds *= bigtens[i];
3803 } 3822 }
3804 dval(&u) /= ds; 3823 dval(&u) /= ds;
3805 } 3824 }
3806 » » else if ((j1 = -k)) { 3825 » » else {
3807 » » » dval(&u) *= tens[j1 & 0xf]; 3826 » » » j1 = -k;
3808 » » » for(j = j1 >> 4; j; j >>= 1, i++) 3827 » » » if (j1) {
3809 » » » » if (j & 1) { 3828 » » » » dval(&u) *= tens[j1 & 0xf];
3810 » » » » » ieps++; 3829 » » » » for(j = j1 >> 4; j; j >>= 1, i++)
3811 » » » » » dval(&u) *= bigtens[i]; 3830 » » » » » if (j & 1) {
3812 » » » » » } 3831 » » » » » » ieps++;
3832 » » » » » » dval(&u) *= bigtens[i];
3833 » » » » » » }
3834 » » » » }
3813 } 3835 }
3814 if (k_check && dval(&u) < 1. && ilim > 0) { 3836 if (k_check && dval(&u) < 1. && ilim > 0) {
3815 if (ilim1 <= 0) 3837 if (ilim1 <= 0)
3816 goto fast_failed; 3838 goto fast_failed;
3817 ilim = ilim1; 3839 ilim = ilim1;
3818 k--; 3840 k--;
3819 dval(&u) *= 10.; 3841 dval(&u) *= 10.;
3820 ieps++; 3842 ieps++;
3821 } 3843 }
3822 dval(&eps) = ieps*dval(&u) + 7.; 3844 dval(&eps) = ieps*dval(&u) + 7.;
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
3957 s2 -= i; 3979 s2 -= i;
3958 } 3980 }
3959 if (b5 > 0) { 3981 if (b5 > 0) {
3960 if (leftright) { 3982 if (leftright) {
3961 if (m5 > 0) { 3983 if (m5 > 0) {
3962 mhi = pow5mult(mhi, m5); 3984 mhi = pow5mult(mhi, m5);
3963 b1 = mult(mhi, b); 3985 b1 = mult(mhi, b);
3964 Bfree(b); 3986 Bfree(b);
3965 b = b1; 3987 b = b1;
3966 } 3988 }
3967 » » » if ((j = b5 - m5)) 3989 » » » j = b5 - m5;
3990 » » » if (j)
3968 b = pow5mult(b, j); 3991 b = pow5mult(b, j);
3969 } 3992 }
3970 else 3993 else
3971 b = pow5mult(b, b5); 3994 b = pow5mult(b, b5);
3972 } 3995 }
3973 S = i2b(1); 3996 S = i2b(1);
3974 if (s5 > 0) 3997 if (s5 > 0)
3975 S = pow5mult(S, s5); 3998 S = pow5mult(S, s5);
3976 3999
3977 /* Check for special case that d is a normalized power of 2. */ 4000 /* Check for special case that d is a normalized power of 2. */
(...skipping 17 matching lines...) Expand all
3995 } 4018 }
3996 4019
3997 /* Arrange for convenient computation of quotients: 4020 /* Arrange for convenient computation of quotients:
3998 * shift left if necessary so divisor has 4 leading 0 bits. 4021 * shift left if necessary so divisor has 4 leading 0 bits.
3999 * 4022 *
4000 * Perhaps we should just compute leading 28 bits of S once 4023 * Perhaps we should just compute leading 28 bits of S once
4001 * and for all and pass them and a shift to quorem, so it 4024 * and for all and pass them and a shift to quorem, so it
4002 * can do shifts and ors to compute the numerator for q. 4025 * can do shifts and ors to compute the numerator for q.
4003 */ 4026 */
4004 #ifdef Pack_32 4027 #ifdef Pack_32
4005 » if ((i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f)) 4028 » i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0x1f;
4029 » if (i)
4006 i = 32 - i; 4030 i = 32 - i;
4007 #define iInc 28 4031 #define iInc 28
4008 #else 4032 #else
4009 if (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf) 4033 if (i = ((s5 ? 32 - hi0bits(S->x[S->wds-1]) : 1) + s2) & 0xf)
4010 i = 16 - i; 4034 i = 16 - i;
4011 #define iInc 12 4035 #define iInc 12
4012 #endif 4036 #endif
4013 i = dshift(S, s2); 4037 i = dshift(S, s2);
4014 b2 += i; 4038 b2 += i;
4015 m2 += i; 4039 m2 += i;
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after
4200 #endif 4224 #endif
4201 Bfree(b); 4225 Bfree(b);
4202 *s = 0; 4226 *s = 0;
4203 *decpt = k + 1; 4227 *decpt = k + 1;
4204 if (rve) 4228 if (rve)
4205 *rve = s; 4229 *rve = s;
4206 return s0; 4230 return s0;
4207 } 4231 }
4208 4232
4209 } // namespace dmg_fp 4233 } // namespace dmg_fp
OLDNEW
« no previous file with comments | « base/third_party/dmg_fp/README.chromium ('k') | base/third_party/dmg_fp/g_fmt.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698