public void divideDestructive(UnsignedInt128 right, UnsignedInt128 remainder) {
    if (right.isZero()) {
      assert (right.isZero());
      SqlMathUtil.throwZeroDivisionException();
    }
    if (right.count == 1) {
      assert (right.v[1] == 0);
      assert (right.v[2] == 0);
      assert (right.v[3] == 0);
      int rem = divideDestructive(right.v[0]);
      remainder.update(rem);
      return;
    }

    int[] quotient = new int[5];
    int[] rem = SqlMathUtil.divideMultiPrecision(this.v, right.v, quotient);

    update(quotient[0], quotient[1], quotient[2], quotient[3]);
    remainder.update(rem[0], rem[1], rem[2], rem[3]);
  }
Divides this value with the given value. This version is destructive,
meaning it modifies this object.

@param right
         the value to divide
@param remainder
         object to receive remainder
common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java