SVN=114204
diff --git a/src/lib/math/sinh.go b/src/lib/math/sinh.go
new file mode 100644
index 0000000..a26031b
--- /dev/null
+++ b/src/lib/math/sinh.go
@@ -0,0 +1,75 @@
+// Copyright 2009 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package sinh
+
+import	exp "exp"
+export	sinh, cosh
+
+/*
+	sinh(arg) returns the hyperbolic sine of its floating-
+	point argument.
+
+	The exponential func is called for arguments
+	greater in magnitude than 0.5.
+
+	A series is used for arguments smaller in magnitude than 0.5.
+	The coefficients are #2029 from Hart & Cheney. (20.36D)
+
+	cosh(arg) is computed from the exponential func for
+	all arguments.
+ */
+
+const
+(
+	p0	= -0.6307673640497716991184787251e+6;
+	p1	= -0.8991272022039509355398013511e+5;
+	p2	= -0.2894211355989563807284660366e+4;
+	p3	= -0.2630563213397497062819489e+2;
+	q0	= -0.6307673640497716991212077277e+6;
+	q1	=  0.1521517378790019070696485176e+5;
+	q2	= -0.173678953558233699533450911e+3;
+)
+
+func
+sinh(arg double) double
+{
+	var temp, argsq double;
+	var sign bool;
+
+	sign = false;
+	if arg < 0 {
+		arg = -arg;
+		sign = true;
+	}
+	switch true {
+	case arg > 21:
+		temp = exp.exp(arg)/2;
+
+	case arg > 0.5:
+		temp = (exp.exp(arg) - exp.exp(-arg))/2;
+
+	default:
+		argsq = arg*arg;
+		temp = (((p3*argsq+p2)*argsq+p1)*argsq+p0)*arg;
+		temp = temp/(((argsq+q2)*argsq+q1)*argsq+q0);
+	}
+
+	if sign {
+		temp = -temp;
+	}
+	return temp;
+}
+
+func
+cosh(arg double) double
+{
+	if arg < 0 {
+		arg = - arg;
+	}
+	if arg > 21 {
+		return exp.exp(arg)/2;
+	}
+	return (exp.exp(arg) + exp.exp(-arg))/2;
+}