DIGIT(&m,0) |= 1; DIGIT(&m, USED(&m)-1) |= 1L << (DIGIT_BIT - 1); if (mp_cmp(&a, &m) > 0) mp_sub(&a, &m, &a);
int main(int argc, char *argv[]){  int          ix, num, prec = 8;  unsigned int seed;  clock_t      start, stop;  double       sec;  mp_int     a, m, c;  if(getenv("SEED") != NULL)    seed = abs(atoi(getenv("SEED")));  else     seed = (unsigned int)time(NULL);  if(argc < 2) {    fprintf(stderr, "Usage: %s <num-tests> [<nbits>]\n", argv[0]);    return 1;  }  if((num = atoi(argv[1])) < 0)    num = -num;  if(!num) {    fprintf(stderr, "%s: must perform at least 1 test\n", argv[0]);    return 1;  }  if(argc > 2) {    if((prec = atoi(argv[2])) <= 0)      prec = 8;    else       prec = (prec + (DIGIT_BIT - 1)) / DIGIT_BIT;  }    printf("Modular exponentiation timing test\n"	 "Precision:  %d digits (%d bits)\n"	 "# of tests: %d\n\n", prec, prec * DIGIT_BIT, num);  mp_init_size(&a, prec);  mp_init_size(&m, prec);  mp_init_size(&c, prec);  srand(seed);  start = clock();  for(ix = 0; ix < num; ix++) {    mpp_random_size(&a, prec);    mpp_random_size(&c, prec);    mpp_random_size(&m, prec);    mp_exptmod(&a, &c, &m, &c);  }  stop = clock();  sec = clk_to_sec(start, stop);  printf("Total:      %.3f seconds\n", sec);  printf("Individual: %.3f seconds\n", sec / num);  mp_clear(&c);  mp_clear(&a);  mp_clear(&m);  return 0;}