12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #include "slatec-internal.hpp"
- int zs1s2_(double *zrr, double *zri, double *s1r,
- double *s1i, double *s2r, double *s2i, integer *nz,
- double *ascle, double *alim, integer *iuf)
- {
-
- static double const zeror = 0.;
- static double const zeroi = 0.;
-
- double aa, c1i, as1, as2, c1r, aln, s1di, s1dr;
- integer idum;
- *nz = 0;
- as1 = zabs_(s1r, s1i);
- as2 = zabs_(s2r, s2i);
- if (*s1r == 0. && *s1i == 0.) {
- goto L10;
- }
- if (as1 == 0.) {
- goto L10;
- }
- aln = -(*zrr) - *zrr + log(as1);
- s1dr = *s1r;
- s1di = *s1i;
- *s1r = zeror;
- *s1i = zeroi;
- as1 = zeror;
- if (aln < -(*alim)) {
- goto L10;
- }
- zlog_(&s1dr, &s1di, &c1r, &c1i, &idum);
- c1r = c1r - *zrr - *zrr;
- c1i = c1i - *zri - *zri;
- zexp_(&c1r, &c1i, s1r, s1i);
- as1 = zabs_(s1r, s1i);
- ++(*iuf);
- L10:
- aa = max(as1,as2);
- if (aa > *ascle) {
- return 0;
- }
- *s1r = zeror;
- *s1i = zeroi;
- *s2r = zeror;
- *s2i = zeroi;
- *nz = 1;
- *iuf = 0;
- return 0;
- }
|