1*3e12c5d1SDavid du Colombier #include <math.h> 2*3e12c5d1SDavid du Colombier 3*3e12c5d1SDavid du Colombier /* 4*3e12c5d1SDavid du Colombier tanh(arg) computes the hyperbolic tangent of its floating 5*3e12c5d1SDavid du Colombier point argument. 6*3e12c5d1SDavid du Colombier 7*3e12c5d1SDavid du Colombier sinh and cosh are called except for large arguments, which 8*3e12c5d1SDavid du Colombier would cause overflow improperly. 9*3e12c5d1SDavid du Colombier */ 10*3e12c5d1SDavid du Colombier 11*3e12c5d1SDavid du Colombier double tanh(double arg)12*3e12c5d1SDavid du Colombiertanh(double arg) 13*3e12c5d1SDavid du Colombier { 14*3e12c5d1SDavid du Colombier 15*3e12c5d1SDavid du Colombier if(arg < 0) { 16*3e12c5d1SDavid du Colombier arg = -arg; 17*3e12c5d1SDavid du Colombier if(arg > 21) 18*3e12c5d1SDavid du Colombier return -1; 19*3e12c5d1SDavid du Colombier return -sinh(arg)/cosh(arg); 20*3e12c5d1SDavid du Colombier } 21*3e12c5d1SDavid du Colombier if(arg > 21) 22*3e12c5d1SDavid du Colombier return 1; 23*3e12c5d1SDavid du Colombier return sinh(arg)/cosh(arg); 24*3e12c5d1SDavid du Colombier } 25