(mpn_bitsize): Fix bit location calculation.
authordrepper <drepper>
Sun, 23 Aug 1998 18:18:30 +0000 (18:18 +0000)
committerdrepper <drepper>
Sun, 23 Aug 1998 18:18:30 +0000 (18:18 +0000)
(main): e3s is negative on zero.

math/atest-exp.c
math/atest-exp2.c
math/atest-sincos.c

index 4cab953..4aef38d 100644 (file)
@@ -96,11 +96,11 @@ mpn_bitsize(const mp_limb_t *SRC_PTR, mp_size_t SIZE)
    for (i = SIZE - 1; i > 0; i--)
      if (SRC_PTR[i] != 0)
        break;
-   for (j = mpbpl - 1; j > 0; j--)
-     if ((SRC_PTR[i] & 1 << j) != 0)
+   for (j = mpbpl - 1; j >= 0; j--)
+     if ((SRC_PTR[i] & (mp_limb_t)1 << j) != 0)
        break;
 
-   return i * 32 + j;
+   return i * mpbpl + j;
 }
 
 int
@@ -141,7 +141,7 @@ main (void)
 
       e2s = mpn_bitsize (e2,SZ);
       e3s = mpn_bitsize (e3,SZ);
-      if (e3s > 1 && e2s - e3s < 54)
+      if (e3s >= 0 && e2s - e3s < 54)
        {
 #if PRINT_ERRORS
          printf ("%06x ", i * (0x100000 / (1 << N2)));
index 7243944..059e4cc 100644 (file)
@@ -147,11 +147,11 @@ mpn_bitsize(const mp_limb_t *SRC_PTR, mp_size_t SIZE)
   for (i = SIZE - 1; i > 0; --i)
     if (SRC_PTR[i] != 0)
       break;
-  for (j = mpbpl - 1; j > 0; --j)
-    if ((SRC_PTR[i] & 1 << j) != 0)
+  for (j = mpbpl - 1; j >= 0; --j)
+    if ((SRC_PTR[i] & (mp_limb_t)1 << j) != 0)
       break;
 
-  return i * 32 + j;
+  return i * mpbpl + j;
 }
 
 int
@@ -192,7 +192,7 @@ main (void)
 
       e2s = mpn_bitsize (e2, SZ);
       e3s = mpn_bitsize (e3, SZ);
-      if (e3s > 1 && e2s - e3s < 54)
+      if (e3s >= 0 && e2s - e3s < 54)
        {
 #if PRINT_ERRORS
          printf ("%06x ", i * (0x100000 / (1 << N2)));
index 2f4187c..4dbbffb 100644 (file)
@@ -132,11 +132,11 @@ mpn_bitsize (const mp_limb_t *SRC_PTR, mp_size_t SIZE)
    for (i = SIZE - 1; i > 0; i--)
      if (SRC_PTR[i] != 0)
        break;
-   for (j = mpbpl - 1; j > 0; j--)
-     if ((SRC_PTR[i] & 1 << j) != 0)
+   for (j = mpbpl - 1; j >= 0; j--)
+     if ((SRC_PTR[i] & (mp_limb_t)1 << j) != 0)
        break;
 
-   return i * 32 + j;
+   return i * mpbpl + j;
 }
 
 int
@@ -188,8 +188,8 @@ main (void)
       s3s = mpn_bitsize (s3, SZ);
       c2s = mpn_bitsize (c2, SZ);
       c3s = mpn_bitsize (c3, SZ);
-      if (s3s > 1 && s2s - s3s < 54
-         || c3s > 1 && c2s - c3s < 54
+      if (s3s >= 0 && s2s - s3s < 54
+         || c3s >= 0 && c2s - c3s < 54
          || 0)
        {
 #if PRINT_ERRORS
@@ -204,8 +204,8 @@ main (void)
          print_mpn_hex (c2, (FRAC / 4) + 1);
          putchar ('\n');
          printf (" %c%c    ",
-                 s2s-s3s < 54 ? s2s - s3s == 53 ? 'e' : 'F' : 'P',
-                 c2s-c3s < 54 ? c2s - c3s == 53 ? 'e' : 'F' : 'P');
+                 s3s >= 0 && s2s-s3s < 54 ? s2s - s3s == 53 ? 'e' : 'F' : 'P',
+                 c3s >= 0 && c2s-c3s < 54 ? c2s - c3s == 53 ? 'e' : 'F' : 'P');
          print_mpn_hex (s3, (FRAC / 4) + 1);
          putchar (' ');
          print_mpn_hex (c3, (FRAC / 4) + 1);