/* Copyright (C) 1994, 1998 by Thomas Glen Smith. All Rights Reserved. */
/* circulax APL2 V1.0.1 ************************************************
* Circle functions for complex numbers. *
***********************************************************************/
#define INCLUDES MATH+TRIGKEYS
#include "includes.h"
void circulax(left,rrr,ret)
double *left,*rrr,*ret;
{
Circulap; Circulas; Circulat; Circulav; Circulaw; Circulay; Circulaz;
int ileft;
ileft = *left; /* Convert to integer. */
for(;;) { /* Lets me use break. */
if (!(*(rrr+1) == 0)) break; /* Not a real number. */
if (ileft < ATANH) break; /* Complex number functions. */
if (ileft > TANH) break; /* Complex number functions. */
if (ileft == -6 && *rrr < 1.0) break; /* Complex answer. */
if (ileft == -4 && *rrr >= 0.0 && *rrr < 1.0) break;
*(ret+1) = 0;
circulap(left,rrr,ret); /* Process a real number. */
return; /* All done. */
} /* End for(;;) */
if (ileft < ATANH || ileft == -4) /* -7 */
circulas(left,rrr,ret); /* Neg. key, non-trig. */
else if (ileft > TANH || ileft == 0 || ileft == 4)
circulat(left,rrr,ret); /* Pos. key, non-trig. */
else if (ileft < ATAN) /* -3 */
circulay(left,rrr,ret); /* ATANH(-7), ACOSH(-6), ASINH(-5) */
else if (ileft < SIN) /* +1 */
circulaz(left,rrr,ret); /* ATAN(-3), ACOS(-2), ASIN(-1) */
else if (ileft < SINH) /* +5 */
circulaw(left,rrr,ret); /* TAN(3), COS(2), SIN(1) */
else circulav(left,rrr,ret); /* TANH(7) COSH(6) SINH(5) */
}