SVN=114204
diff --git a/src/lib/math/asin.go b/src/lib/math/asin.go
new file mode 100644
index 0000000..6297064
--- /dev/null
+++ b/src/lib/math/asin.go
@@ -0,0 +1,60 @@
+// 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 asin
+
+import sys "sys"
+import atan "atan"
+import sqrt "sqrt"
+export asin, acos
+
+/*
+ * asin(arg) and acos(arg) return the arcsin, arccos,
+ * respectively of their arguments.
+ *
+ * Arctan is called after appropriate range reduction.
+ */
+
+const
+(
+ pio2 = .15707963267948966192313216e1;
+)
+
+func
+asin(arg double)double
+{
+ var temp, x double;
+ var sign bool;
+
+ sign = false;
+ x = arg;
+ if x < 0 {
+ x = -x;
+ sign = true;
+ }
+ if arg > 1 {
+ return sys.NaN();
+ }
+
+ temp = sqrt.sqrt(1 - x*x);
+ if x > 0.7 {
+ temp = pio2 - atan.atan(temp/x);
+ } else {
+ temp = atan.atan(x/temp);
+ }
+
+ if sign {
+ temp = -temp;
+ }
+ return temp;
+}
+
+func
+acos(arg double)double
+{
+ if(arg > 1 || arg < -1) {
+ return sys.NaN();
+ }
+ return pio2 - asin(arg);
+}