code: public BigDecimal multiply(BigDecimal multiplicand, MathContext mc) {
          if (mc.precision == 0)
              return multiply(multiplicand);
          int productScale = checkScale((long) scale + multiplicand.scale);
          if (this.intCompact != INFLATED) {
              if ((multiplicand.intCompact != INFLATED)) {
                  return multiplyAndRound(this.intCompact, multiplicand.intCompact, productScale, mc);
              } else {
                  return multiplyAndRound(this.intCompact, multiplicand.intVal, productScale, mc);
              }
          } else {
              if ((multiplicand.intCompact != INFLATED)) {
                  return multiplyAndRound(multiplicand.intCompact, this.intVal, productScale, mc);
              } else {
                  return multiplyAndRound(this.intVal, multiplicand.intVal, productScale, mc);
              }
          }
      }
docs: Returns a {@code BigDecimal} whose value is <tt>(this &times;
  multiplicand)</tt>, with rounding according to the context settings.
  
  @param  multiplicand value to be multiplied by this {@code BigDecimal}.
  @param  mc the context to use.
  @return {@code this * multiplicand}, rounded as necessary.
  @throws ArithmeticException if the result is inexact but the
  rounding mode is {@code UNNECESSARY}.
  @since  1.5