e2[(FRAC - i * 4 - 4) / mpbpl] |= (strchr (hexdig, exp1[i + 1]) - hexdig
e2[(FRAC - i * 4 - 4) / mpbpl] |= ((strchr (hexdig, exp1[i + 1]) - hexdig)
main (void){   mp1 ex, x, xt, e2, e3;   int i;   int errors = 0;   int failures = 0;   mp1 maxerror;   int maxerror_s = 0;   const double sf = pow (2, mpbpl);   /* assert (mpbpl == mp_bits_per_limb); */   assert (FRAC / mpbpl * mpbpl == FRAC);   memset (maxerror, 0, sizeof (mp1));   memset (xt, 0, sizeof (mp1));   xt[(FRAC - N2) / mpbpl] = (mp_limb_t)1 << (FRAC - N2) % mpbpl;   for (i = 0; i < 1 << N2; i++)   {      int e2s, e3s, j;      double de2;      mpn_mul_1 (x,xt,SZ,i);      exp_mpn (ex, x);      de2 = exp (i / (double) (1 << N2));      for (j = SZ-1; j >= 0; j--)	{	  e2[j] = (mp_limb_t) de2;	  de2 = (de2 - e2[j]) * sf;	}      if (mpn_cmp (ex,e2,SZ) >= 0)	mpn_sub_n (e3,ex,e2,SZ);      else	mpn_sub_n (e3,e2,ex,SZ);      e2s = mpn_bitsize (e2,SZ);      e3s = mpn_bitsize (e3,SZ);      if (e3s >= 0 && e2s - e3s < 54)	{#if PRINT_ERRORS	  printf ("%06x ", i * (0x100000 / (1 << N2)));	  print_mpn_hex (ex, (FRAC / 4) + 1);	  fputs ("\n       ",stdout);	  print_mpn_hex (e2, (FRAC / 4) + 1);	  printf ("\n %c     ",		  e2s - e3s < 54 ? e2s - e3s == 53 ? 'e' : 'F' : 'P');	  print_mpn_hex (e3, (FRAC / 4) + 1);	  putchar ('\n');#endif	 errors += (e2s - e3s == 53);	 failures += (e2s - e3s < 53);	}      if (e3s >= maxerror_s	  && mpn_cmp (e3, maxerror, SZ) > 0)	{	  memcpy (maxerror, e3, sizeof (mp1));	  maxerror_s = e3s;	}   }   /* Check exp_mpn against precomputed value of exp(1).  */   memset (x, '\0', sizeof (mp1));   x[FRAC / mpbpl] = (mp_limb_t)1 << FRAC % mpbpl;   exp_mpn (ex, x);   memset (e2, '\0', sizeof (mp1));   for (i = -1; i < 100 && i < FRAC / 4; i++)     e2[(FRAC - i * 4 - 4) / mpbpl] |= (strchr (hexdig, exp1[i + 1]) - hexdig					<< (FRAC - i * 4 - 4) % mpbpl);   if (mpn_cmp (ex, e2, SZ) >= 0)     mpn_sub_n (e3, ex, e2, SZ);   else     mpn_sub_n (e3, e2, ex, SZ);   printf ("%d failures; %d errors; error rate %0.2f%%\n", failures, errors,	   errors * 100.0 / (double) (1 << N2));   fputs ("maximum error:   ", stdout);   print_mpn_hex (maxerror, (FRAC / 4) + 1);   fputs ("\nerror in exp(1): ", stdout);   print_mpn_hex (e3, (FRAC / 4) + 1);   putchar ('\n');   return failures == 0 ? 0 : 1;}