public void multiplyScaleDownTenDestructive(UnsignedInt128 right,
      short tenScale) {
    assert (tenScale >= 0);
    if (this.fitsInt32() && right.fitsInt32()) {
      multiplyDestructiveFitsInt32(right, (short) 0, tenScale);
      return;
    }
    int[] z = multiplyArrays4And4To8(this.v, right.v);

    // Then, scale back.
    scaleDownTenArray8RoundUp(z, tenScale);
    update(z[0], z[1], z[2], z[3]);
  }
Multiply this value with the given value, followed by ten-based scale down.
This method does the two operations without cutting off, so it preserves
accuracy without throwing a wrong overflow exception.

@param right
         right operand
@param tenScale
         distance to scale down
common/src/java/org/apache/hadoop/hive/common/type/UnsignedInt128.java