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;
	}

}

 

Ads help maintain this website.