############################################################################
#
#	File:     math.icn
#
#	Subject:  Procedures for mathematical computations
#
#	Author:   Ralph E. Griswold
#
#	Date:     December 26, 1995
#
############################################################################
#
#   This file is in the public domain.
#
############################################################################
#
#	binocoef(n, k)	produces the binomial coefficient n over k.  It
#			fails unless 0 <= k <= n.
#
#	cosh(r)		produces the hyperbolic cosine of r.
#
#	sinh(r)		produces the hyperbolic sine of r.
#
#	tanh(r)		produces the hyperbolic tangent of r.
#
#
############################################################################
#
#  Requires:  Large integer arithmetic for binocoef(n, k) for all but small
#	      values of n and k.
#
############################################################################
#
#  Links:  factors
#
############################################################################

link factors

procedure binocoef(n, k)	#: binomial coefficient

   k := integer(k) | fail
   n := integer(n) | fail

   if (k = 0) | (n = k) then return 1

   if 0 <= k <= n then 
      return factorial(n) / (factorial(k) * factorial(n - k))
   else fail

end

procedure cosh(r)		#: hyperbolic cosine

   return (&e ^ r + &e ^ -r) / 2

end

procedure sinh(r)		#: hyperbolic sine

   return (&e ^ r - &e ^ -r) / 2

end

procedure tanh(r)		#: hyperbolic tanh

   return (&e ^ r - &e ^ -r) / (&e ^ r + &e ^ -r)

end
