1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "slatec-internal.hpp"
- int zlog_(double *ar, double *ai, double *br,
- double *bi, integer *ierr)
- {
-
- static double const dpi = 3.141592653589793238462643383;
- static double const dhpi = 1.570796326794896619231321696;
-
- double zm;
- double dtheta;
- *ierr = 0;
- if (*ar == 0.) {
- goto L10;
- }
- if (*ai == 0.) {
- goto L20;
- }
- dtheta = atan(*ai / *ar);
- if (dtheta <= 0.) {
- goto L40;
- }
- if (*ar < 0.) {
- dtheta -= dpi;
- }
- goto L50;
- L10:
- if (*ai == 0.) {
- goto L60;
- }
- *bi = dhpi;
- *br = log((abs(*ai)));
- if (*ai < 0.) {
- *bi = -(*bi);
- }
- return 0;
- L20:
- if (*ar > 0.) {
- goto L30;
- }
- *br = log((abs(*ar)));
- *bi = dpi;
- return 0;
- L30:
- *br = log(*ar);
- *bi = 0.;
- return 0;
- L40:
- if (*ar < 0.) {
- dtheta += dpi;
- }
- L50:
- zm = zabs_(ar, ai);
- *br = log(zm);
- *bi = dtheta;
- return 0;
- L60:
- *ierr = 1;
- return 0;
- }
|