code: public BigDecimal subtract(BigDecimal subtrahend) {
          if (this.intCompact != INFLATED) {
              if ((subtrahend.intCompact != INFLATED)) {
                  return add(this.intCompact, this.scale, -subtrahend.intCompact, subtrahend.scale);
              } else {
                  return add(this.intCompact, this.scale, subtrahend.intVal.negate(), subtrahend.scale);
              }
          } else {
              if ((subtrahend.intCompact != INFLATED)) {
                  // Pair of subtrahend values given before pair of
                  // values from this BigDecimal to avoid need for
                  // method overloading on the specialized add method
                  return add(-subtrahend.intCompact, subtrahend.scale, this.intVal, this.scale);
              } else {
                  return add(this.intVal, this.scale, subtrahend.intVal.negate(), subtrahend.scale);
              }
          }
      }
docs: Returns a {@code BigDecimal} whose value is {@code (this -
  subtrahend)}, and whose scale is {@code max(this.scale(),
  subtrahend.scale())}.
  
  @param  subtrahend value to be subtracted from this {@code BigDecimal}.
  @return {@code this - subtrahend}