code: static Object bigDecimalBinaryOperation(BigDecimal lhs, BigDecimal rhs, int kind)
          throws UtilEvalError
      {
          switch(kind)
          {
              // arithmetic
              case PLUS:
                  return lhs.add(rhs);
  
              case MINUS:
                  return lhs.subtract(rhs);
  
              case STAR:
                  return lhs.multiply(rhs);
  
              case SLASH:
                  return lhs.divide(rhs);
  
              case MOD:
              case MODX:
                  return lhs.remainder(rhs);
  
              case POWER:
              case POWERX:
                  return lhs.pow(rhs.intValue());
  
              // can't shift floats
              case LSHIFT:
              case LSHIFTX:
              case RSIGNEDSHIFT:
              case RSIGNEDSHIFTX:
              case RUNSIGNEDSHIFT:
              case RUNSIGNEDSHIFTX:
                  throw new UtilEvalError("Can't shift floatingpoint values");
  
          }
          throw new InterpreterError(
                  "Unimplemented binary float operator");
      }
docs: returns Object covering both Long and Boolean return types