public void divideScaleUpTenDestructive(UnsignedInt128 right, short tenScale,
      UnsignedInt128 remainder) {
    // in this case, we have to scale up _BEFORE_ division. otherwise we
    // might lose precision.
    if (tenScale > SqlMathUtil.MAX_POWER_TEN_INT128) {
      // in this case, the result will be surely more than 128 bit even
      // after division
      SqlMathUtil.throwOverflowException();
    }
    int[] scaledUp = multiplyConstructive256(SqlMathUtil.POWER_TENS_INT128[tenScale]);
    int[] quotient = new int[5];
    int[] rem = SqlMathUtil.divideMultiPrecision(scaledUp, right.v, quotient);
    update(quotient[0], quotient[1], quotient[2], quotient[3]);
    remainder.update(rem[0], rem[1], rem[2], rem[3]);
  }
Scale up this object for 10**tenScale and then divides this value with the
given value. This version is destructive, meaning it modifies this object.

@param right
         the value to divide
@param tenScale
         ten-based scale up distance
@param remainder
         object to receive remainder
common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java