diff options
| author | rsc <devnull@localhost> | 2004-04-21 22:19:33 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2004-04-21 22:19:33 +0000 |
| commit | 28994509cc11ac6a5443054dfae1fedfb69039bc (patch) | |
| tree | 9d5adcd11af2708db0ecc246e008c308ca0f97d4 /src/cmd/map/libmap/cubrt.c | |
| parent | a01e58366c54804f15f84d6e21d13f2e4080977a (diff) | |
| download | plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.tar.gz plan9port-28994509cc11ac6a5443054dfae1fedfb69039bc.zip | |
Why not?
Diffstat (limited to 'src/cmd/map/libmap/cubrt.c')
| -rw-r--r-- | src/cmd/map/libmap/cubrt.c | 30 |
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); +} |
