anchor.diff:      assert(r_digits.length >= r_used + (r_used & 1));
       r_digits[0] = x_digits[ds] >> bs;
       for (var i = ds + 1; i < x_used; i++) {
  -      r_digits[i - ds - 1] |= (x_digits[i] & bm) << cbs;
  -      r_digits[i - ds] = x_digits[i] >> bs;
  -    }
  -    if (r_used.isOdd) {
  +      final d = x_digits[i];
  +      r_digits[i - ds - 1] |= (d & bm) << cbs;
  +      r_digits[i - ds] = d >> bs;
  +    }
  +    if (r_digits[r_used - 1] == 0) {
  +      r_used--;  // Clamp result.
  +    } else if (r_used.isOdd) {
         r_digits[r_used] = 0;
       }
       return r_used;
  
positive.code:     var c = 0;
      var i = x_used;
      while (--i >= 0) {
        r_digits[i + ds + 1] = (x_digits[i] >> cbs) | c;
        c = (x_digits[i] & bm) << bs;
      }
      r_digits[ds] = c;
      i = ds;
      while (--i >= 0) {
        r_digits[i] = 0;
      }
      if (r_used.isOdd) {
        r_digits[r_used] = 0;
      }
      return r_used;
  
negative.code:     r_digits[0] = digits[ds] >> bs;
      var used = _used;
      for (var i = ds + 1; i < used; i++) {
        final d = digits[i];
        r_digits[i - ds - 1] |= (d & bm) << cbs;
        r_digits[i - ds] = d >> bs;
      }
      var r = new _Bigint(_neg, r_used, r_digits);
      if (_neg) {
  