/* Copyright (C) 1994 by Thomas Glen Smith. All Rights Reserved. */
/* circulav APL2 V1.0.0 ************************************************
* Called by circulax. Circle functions for complex numbers, hyperbolic *
* trigonometric TANH, COSH, SINH. *
***********************************************************************/
#define INCLUDES MATH+TRIGKEYS
#include "includes.h"
void circulav(left,rrr,ret)
double *left,*rrr,*ret;
{
Circulax; Dividex; Expx; Minusx; Plusx;
extern int aplerr;
int ileft;
double b,ixr[2],key,wa[2],wb[2],wc[3],wd[2],x,y;
static double
iii[2]={0.0,1.0},
one[2]={1.0,0.0},
two[2]={2.0,0.0};
switch (ileft = (int) *left) {
case SINH: /* sinh r = (*r_1%*r)%2 */
expx(rrr,wa); /* wa = *r */
dividex(one,wa,wb); /* wb = 1%*r */
minusx(wa,wb,wc); /* wc = *r_1%*r */
dividex(wc,two,ret); /*ret = (*r_1%*r)%2 */
break;
case COSH: /* cosh r = (*r+1%*r)%2 */
expx(rrr,wa); /* wa = *r */
dividex(one,wa,wb); /* wb = 1%*r */
plusx(wa,wb,wc); /* wc = *r+1%*r */
dividex(wc,two,ret); /*ret = (*r+1%*r)%2 */
break;
case TANH: /* tanh r = (t_s)%t+s#1%t#*r */
expx(rrr,wa); /* wa = *r */
dividex(one,wa,wb); /* wb = 1%*r */
minusx(wa,wb,wc); /* wc = t_s */
plusx(wa,wb,wd); /* wd = t+s#1%t#*r */
dividex(wc,wd,ret); /*ret = (t_s)%t+s#1%t#*r */
break;
default: aplerr = 85; return; /* left invalid */
} /* end switch */
}