/*
   ===========================================================================
   Hyperbolic tangent Function

   tanh(x) = (e^x - e^-x) / (e^x + e^-x)
           = (A-B) / (A+B)
           = C / D
  where:
         A = e^x
         B = e^-x
         C = A-B
         D = A+B

    ERRORS:
    Returns FALSE if argument is non-numeric.

    DEPENDENCY: BC_Exp()
   ===========================================================================
*/

   function BC_Tanh ($xArg, $Decimals=16)
{
   $Q = 100;
   $q = trim($Decimals);

   $x = trim($xArg);  if (!Is_Numeric($x)) {return FALSE;}
   $S = (bcComp($x, '0', $Q) < 0)? '-':'';
   $x = Str_Replace('+', '', Str_Replace('-', '', $x));
   $q = trim($Decimals);   if ($q < 1) {$q = 1;}   if ($q > 100) {$q = 100;}
   $A = BC_Exp($x, $Q);
   $B = bcDiv('1', $A, $Q);
   $C = bcSub($A,  $B, $Q);
   $D = bcAdd($A,  $B, $Q);

   return $S . bcAdd(bcDiv($C,$D,$Q), '0.' . Str_Repeat('0',$q) . '5', $q);
}