package jscl.math.function.trigonometric;
import jscl.math.Generic;
import jscl.math.JsclInteger;
import jscl.math.NumericWrapper;
import jscl.math.Variable;
import jscl.math.function.*;
import javax.annotation.Nonnull;
public class Acos extends ArcTrigonometric {
public Acos(Generic generic) {
super("acos", new Generic[]{generic});
}
public Generic derivative(int n) {
return new Inverse(new Sqrt(JsclInteger.valueOf(1).subtract(parameters[0].pow(2))).selfExpand()).selfExpand().negate();
}
public Generic selfExpand() {
if (parameters[0].signum() < 0) {
return Constants.Generic.PI.subtract(new Acos(parameters[0].negate()).selfExpand());
} else if (parameters[0].compareTo(JsclInteger.valueOf(1)) == 0) {
return JsclInteger.valueOf(0);
}
return expressionValue();
}
public Generic selfElementary() {
return Constants.Generic.I.multiply(
new Ln(
new Root(
new Generic[]{
JsclInteger.valueOf(-1),
JsclInteger.valueOf(2).multiply(parameters[0]),
JsclInteger.valueOf(-1)
},
0
).selfElementary()
).selfElementary()
);
}
public Generic selfNumeric() {
return ((NumericWrapper) parameters[0]).acos();
}
@Nonnull
public Variable newInstance() {
return new Acos(null);
}
}