package mikera.vectorz.ops; import mikera.vectorz.AVector; import mikera.vectorz.util.DoubleArrays; public final class Tanh extends ABoundedOp { public static final Tanh INSTANCE=new Tanh(); @Override public double apply(double x) { return Math.tanh(x); } @Override public void applyTo(AVector v) { v.tanh(); } @Override public void applyTo(double[] data) { DoubleArrays.tanh(data); } @Override public void applyTo(double[] data, int start,int length) { DoubleArrays.tanh(data, start, length); } @Override public boolean hasDerivative() { return true; } @Override public double derivativeForOutput(double y) { return 1.0-y*y; } @Override public double derivative(double x) { double y=Math.tanh(x); return 1.0-y*y; } @Override public double minValue() { return -1.0; } @Override public double averageValue() { return 0.0; } @Override public double maxValue() { return 1.0; } }