aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/map/libmap/cubrt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/map/libmap/cubrt.c')
-rw-r--r--src/cmd/map/libmap/cubrt.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/cmd/map/libmap/cubrt.c b/src/cmd/map/libmap/cubrt.c
new file mode 100644
index 00000000..fd508d2b
--- /dev/null
+++ b/src/cmd/map/libmap/cubrt.c
@@ -0,0 +1,30 @@
+#include <u.h>
+#include <libc.h>
+#include "map.h"
+
+double
+cubrt(double a)
+{
+ double x,y,x1;
+ if(a==0)
+ return(0.);
+ y = 1;
+ if(a<0) {
+ y = -y;
+ a = -a;
+ }
+ while(a<1) {
+ a *= 8;
+ y /= 2;
+ }
+ while(a>1) {
+ a /= 8;
+ y *= 2;
+ }
+ x = 1;
+ do {
+ x1 = x;
+ x = (2*x1+a/(x1*x1))/3;
+ } while(fabs(x-x1)>10.e-15);
+ return(x*y);
+}