Blame


1 28994509 2004-04-21 devnull #include <u.h>
2 28994509 2004-04-21 devnull #include <libc.h>
3 28994509 2004-04-21 devnull #include "map.h"
4 28994509 2004-04-21 devnull
5 28994509 2004-04-21 devnull double
6 28994509 2004-04-21 devnull cubrt(double a)
7 28994509 2004-04-21 devnull {
8 28994509 2004-04-21 devnull double x,y,x1;
9 fa325e9b 2020-01-10 cross if(a==0)
10 28994509 2004-04-21 devnull return(0.);
11 28994509 2004-04-21 devnull y = 1;
12 28994509 2004-04-21 devnull if(a<0) {
13 28994509 2004-04-21 devnull y = -y;
14 28994509 2004-04-21 devnull a = -a;
15 28994509 2004-04-21 devnull }
16 28994509 2004-04-21 devnull while(a<1) {
17 28994509 2004-04-21 devnull a *= 8;
18 28994509 2004-04-21 devnull y /= 2;
19 28994509 2004-04-21 devnull }
20 28994509 2004-04-21 devnull while(a>1) {
21 28994509 2004-04-21 devnull a /= 8;
22 28994509 2004-04-21 devnull y *= 2;
23 28994509 2004-04-21 devnull }
24 28994509 2004-04-21 devnull x = 1;
25 28994509 2004-04-21 devnull do {
26 28994509 2004-04-21 devnull x1 = x;
27 28994509 2004-04-21 devnull x = (2*x1+a/(x1*x1))/3;
28 28994509 2004-04-21 devnull } while(fabs(x-x1)>10.e-15);
29 28994509 2004-04-21 devnull return(x*y);
30 28994509 2004-04-21 devnull }