ref: bc7d74f09b53c39ada4e73ce73c01c6c0928f9f4
dir: /sys/src/cmd/map/libmap/cubrt.c/
#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);
}