package mikera.vectorz.ops;
import mikera.arrayz.INDArray;
import mikera.vectorz.Op;
import mikera.vectorz.util.DoubleArrays;
/**
* The renowned exponential function
*
* @author Mike
*
*/
public final class Exp extends AFunctionOp {
public static final Exp INSTANCE=new Exp();
@Override
public void applyTo(INDArray a) {
a.exp();
}
@Override
public void applyTo(double[] data, int offset, int length) {
DoubleArrays.exp(data,offset,length);
}
@Override
public double apply(double x) {
return Math.exp(x);
}
@Override
public double derivative(double x) {
return Math.exp(x);
}
@Override
public double derivativeForOutput(double y) {
return y;
}
@Override public double applyInverse(double y) {
return Math.log(y);
}
@Override public boolean hasDerivative() {return true;}
@Override public boolean hasInverse() {return true;}
@Override public Op getInverse() {return Log.INSTANCE;}
@Override public double minValue() {return 0.0;}
@Override public Op getDerivativeOp() {return this;}
}