w = (RADIX + DIGIT(mp, 0)) - d;
w = (RADIX + (mp_word)DIGIT(mp, 0)) - d;
mp_err   s_mp_sub_d(mp_int *mp, mp_digit d)    /* unsigned digit subtract */{  mp_word   w, b = 0;  mp_size   ix = 1;  /* Compute initial subtraction    */  w = (RADIX + DIGIT(mp, 0)) - d;  b = CARRYOUT(w) ? 0 : 1;  DIGIT(mp, 0) = ACCUM(w);  /* Propagate borrows leftward     */  while(b && ix < USED(mp)) {    w = (RADIX + DIGIT(mp, ix)) - b;    b = CARRYOUT(w) ? 0 : 1;    DIGIT(mp, ix) = ACCUM(w);    ++ix;  }  /* Remove leading zeroes          */  s_mp_clamp(mp);  /* If we have a borrow out, it's a violation of the input invariant */  if(b)    return MP_RANGE;  else    return MP_OKAY;} /* end s_mp_sub_d() */