[ create a new paste ] login | about

Link: http://codepad.org/JvySId85    [ raw code | output | fork | 1 comment ]

dennyrolling - C++, pasted on Mar 14:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define D0(X) ((X)?1:0)
#define D1(X) ((X)?(1+D0((X)/10)):0)
#define D2(X) ((X)?(1+D1((X)/10)):0)
#define D3(X) ((X)?(1+D2((X)/10)):0)
#define D4(X) ((X)?(1+D3((X)/10)):0)
#define D5(X) ((X)?(1+D4((X)/10)):0)
#define D6(X) ((X)?(1+D4((X)/10)):0)
#define D(X) D6((int)(X))

#define N0(N,X) (((X)+N/(X))/2)
#define N1(N,X) (((N0(N,X))+N/N0(N,X))/2) 
#define N2(N,X) (((N1(N,X))+N/N1(N,X))/2) 
#define N3(N,X) (((N2(N,X))+N/N2(N,X))/2) 
#define Q(X) N3(X, (X)/((5<<(D(X)))))

int main()
{
   #define x 20001.153
   printf("(%f)^2==%f", Q(x), Q(x)*Q(x));
   return 0;
}


Output:
1
(141.425433)^2==20001.153000


Create a new paste based on this one


Comments:
posted by dennyrolling on Jun 13
pretty precise static sqrt for numerical literals up to 6 digits (calculated by compiler).
reply