package mikera.vectorz.ops; import mikera.arrayz.INDArray; import mikera.vectorz.AVector; import mikera.vectorz.Op; import mikera.vectorz.util.DoubleArrays; public final class Reciprocal extends AFunctionOp { public static final Reciprocal INSTANCE = new Reciprocal(); @Override public void applyTo(INDArray a) { a.reciprocal(); } @Override public void applyTo(AVector a) { a.reciprocal(); } @Override public void applyTo(double[] data, int start,int length) { DoubleArrays.reciprocal(data, start, length); } @Override public double apply(double x) { return 1.0/x; } @Override public double derivative(double x) { return -1.0/(x*x); } @Override public double derivativeForOutput(double y) { return -y*y; } @Override public double averageValue() {return 1.0;} @Override public boolean hasInverse() {return true;} @Override public Op getInverse() {return this;} @Override public boolean hasDerivative() {return true;} }