struct xpr xtan (struct xpr z) { int k, m; z = rred (z, 't', &k); if ((xsigerr (xprcmp (&z, &xPi2) >= 0, XEDOM, "xtan()"))) return (!k ? xPinf : xMinf); else { if (xprcmp (&z, &xPi4) == 1) { m = 1; z = xadd (xPi2, z, 1); } else m = 0; if ((k)) z = xneg (c_tan (z)); else z = c_tan (z); if (m) return xdiv (xOne, z); else return z; } }
void * cx_tan(void *data, short int type, int length, int *newlength, short int *newtype, ...) { *newlength = length; if (type == VF_REAL) { *newtype = VF_REAL; return (void *) d_tan((double *) data, length); } else { *newtype = VF_COMPLEX; return (void *) c_tan((complex *) data, length); } }
struct xpr xsin (struct xpr z) { int k; z = rred (z, 's', &k); if (x_exp (&z) >= xK_lin) { z = c_tan (xpr2 (z, -1)); z = xdiv (xpr2 (z, 1), xadd (xOne, xmul (z, z), 0)); } if ((k)) return xneg (z); else return z; }
void Dn_up(struct c_complex z,long nstop,struct c_complex*D) /*:16*/ #line 216 "./mie.w" { struct c_complex zinv,k_over_z; long k; D[0]= c_inv(c_tan(z)); zinv= c_inv(z); for(k= 1;k<nstop;k++){ k_over_z= c_smul((double)k,zinv); D[k]= c_sub(c_inv(c_sub(k_over_z,D[k-1])),k_over_z); } }
struct xpr xcos (struct xpr z) { int k; z = rred (z, 'c', &k); if (x_exp (&z) < xK_lin) { if ((k)) return xneg (xOne); else return xOne; } z = c_tan (xpr2 (z, -1)); z = xmul (z, z); z = xdiv (xadd (xOne, z, 1), xadd (xOne, z, 0)); if ((k)) return xneg (z); else return z; }