9
#define EULER 0.57721566
11
#define PIBY2 1.5707963
15
#define ONE Complex(1.0,0.0)
17
void cisi(double x, double *ci, double *si)
20
double a,err,fact,sign,sum,sumc,sums,t,term;
31
c=Complex(1.0/FPMIN,0.0);
33
for (i=2;i<=MAXIT;i++) {
35
b=Cadd(b,Complex(2.0,0.0));
36
d=Cdiv(ONE,Cadd(RCmul(a,d),b));
37
c=Cadd(b,Cdiv(Complex(a,0.0),c));
40
if (fabs(del.r-1.0)+fabs(del.i) < EPS) break;
42
if (i > MAXIT) nrerror("cf failed in cisi_hack.c");
43
h=Cmul(Complex(cos(t),-sin(t)),h);
47
if (t < sqrt(FPMIN)) {
54
for (k=1;k<=MAXIT;k++) {
70
if (k > MAXIT) nrerror("maxits exceeded in cisi");
73
*ci=sumc+log(t)+EULER;
75
if (x < 0.0) *si = -(*si);