scalar sasfit_si(scalar x) { scalar absx,z,f,g; absx=fabs(x); if (absx <= 4.0) { scalar a[11],z2; a[0] =2.7368706803630e0; a[1] = -1.1106314107894e0; a[2] =1.4176562194666e-1; a[3] = -1.0252652579174e-2; a[4] =4.6494615619880e-4; a[5] = -1.4361730896642e-5; a[6] =3.2093684948229e-7; a[7] = -5.4251990770162e-9; a[8] =7.1776288639895e-11; a[9] = -7.6335493723482e-13; a[10]=6.6679958346983e-15; z=x/4.0; z2=z*z; g=z2+z2-1.0; return z*chepolsum(10,g,a); } else { scalar cx,sx; scalar ssi; sincosfg(x,&f,&g); cx=cos(x); sx=sin(x); ssi = 1.570796326794897; if (x < 0.0) ssi = -(ssi); ssi -= f*cx+g*sx; return ssi; } }
void main () { void sincosint(real_t, real_t *, real_t *); void sincosfg(real_t, real_t *, real_t *); real_t si,ci,f,g; sincosint(1.0,&si,&ci); sincosfg(1.0,&f,&g); printf("SINCOSINT and SINCOSFG deliver:\n"); printf(" SI(1) = %+e CI(1) = %+e\n" " F(1) = %+e G(1) = %+e\n",si,ci,f,g); }