package rpn.doubles;

import rpn.Calculator;

public class CaretItem extends Fcn2Item {
	
	public CaretItem(Calculator ca) {
		super(ca);
	}
	
	// x^y
	public double f(double x, double y) {
		if (x > 0.0) {
			double ell = Math.log(x);
			return(Math.exp(y*ell));
		} else if (x < 0.0) {
			int n = (int) Math.floor(y);
			double ell = Math.log(-x);
			if ((n & 1) == 0) {
				return(Math.exp(y*ell));				
			} else {
				return(-Math.exp(y*ell));
			}
		} else {
				return(0.0);
		}
	}
	
	public boolean inRange(double x, double y) {
		return(x > 0.0 || Math.floor(y) == y);
	}
	
	public String toString() {
		return("^");
	}
}
