docs: public static BigDecimal atan2(BigDecimal y, BigDecimal x, MathContext mathContext) {
  		checkMathContext(mathContext);
  		MathContext mc = new MathContext(mathContext.getPrecision() + 3, mathContext.getRoundingMode());
  
  		if (x.signum() > 0) { // x > 0
  			return atan(y.divide(x, mc), mathContext);
  		} else if (x.signum() < 0) {
  			if (y.signum() > 0) {  // x < 0 && y > 0
  				return atan(y.divide(x, mc), mc).add(pi(mc), mathContext);
  			} else if (y.signum() < 0) { // x < 0 && y < 0
  				return atan(y.divide(x, mc), mc).subtract(pi(mc), mathContext);
  			} else { // x < 0 && y = 0
  				return pi(mathContext);
  			}
  		} else {
  			if (y.signum() > 0) { // x == 0 && y > 0
  				return pi(mc).divide(TWO, mathContext);
  			} else if (y.signum() < 0) {  // x == 0 && y < 0
  				return pi(mc).divide(TWO, mathContext).negate();				
  			} else {
  				throw new ArithmeticException("Illegal atan2(y, x) for x = 0; y = 0");
  			}
  		}
  	}