w = (RADIX + DIGIT(a, ix)) - k;
w = (RADIX + (mp_word)DIGIT(a, ix)) - k;
mp_err   s_mp_sub(mp_int *a, mp_int *b)        /* magnitude subtract      */{  mp_word   w, k = 0;  mp_size   ix;  /*    Subtract and propagate borrow.  Up to the precision of b, this    accounts for the digits of b; after that, we just make sure the    carries get to the right place.  This saves having to pad b out to    the precision of a just to make the loops work right...   */  for(ix = 0; ix < USED(b); ix++) {    w = (RADIX + DIGIT(a, ix)) - k - DIGIT(b, ix);    DIGIT(a, ix) = ACCUM(w);    k = CARRYOUT(w) ? 0 : 1;  }  while(ix < USED(a)) {    w = (RADIX + DIGIT(a, ix)) - k;    DIGIT(a, ix) = ACCUM(w);    k = CARRYOUT(w) ? 0 : 1;    ++ix;  }  /* Clobber any leading zeroes we created    */  s_mp_clamp(a);  s_mp_clamp(b);  /*      If there was a borrow out, then |b| > |a| in violation     of our input invariant.  We've already done the work,     but we'll at least complain about it...   */  if(k)    return MP_RANGE;  else    return MP_OKAY;} /* end s_mp_sub() */