/* Copyright (C) 1994 by Thomas Glen Smith. All Rights Reserved. */ /* circulaw APL2 V1.0.0 ************************************************ * Called by circulax. * * Circle functions for complex numbers, trigonometric functions * * TAN, COS, SIN. * ***********************************************************************/ #define INCLUDES MATH+TRIGKEYS #include "includes.h" void circulaw(left,rrr,ret) double *left,*rrr,*ret; { Circulaw; Dividex; Expx; Minusx; Plusx; Timesx; extern int aplerr; int ileft; double wa[2],wb[2],wc[2],wd[2],x,y; static double iii[2]={0.0,1.0}, one[2]={1.0,0.0}, two[2]={2.0,0.0}, twoiii[2]={0.0,2.0}; switch (ileft = (int) *left) { case SIN: /* sin r = (s_1%s#*iXr)%2Xi */ timesx(iii,rrr,wb); /* wb = iXr */ expx(wb,wa); /* wa = *iXr */ dividex(one,wa,wb); /* wb = 1%*iXr */ minusx(wa,wb,wc); /* wc = s_1%s#*iXr */ dividex(wc,twoiii,ret); /*ret = (s_1%s#*iXr)%2Xi */ break; case COS:/* cos r = (s+1%s#*iXr)%2 */ timesx(iii,rrr,wb); /* wb = iXr */ expx(wb,wa); /* wa = *iXr */ dividex(one,wa,wb); /* wb = 1%*iXr */ plusx(wa,wb,wc); /* wc = s+1%s#*iXr */ dividex(wc,two,ret); /*ret = (s+1%s#*iXr)%2 */ break; case TAN:/* tan r = (sin r)%cos r */ x = SIN; circulaw(&x,rrr,wa); /* wa = sin r */ x = COS; circulaw(&x,rrr,wb); /* wb = cos r */ dividex(wa,wb,ret); /*ret = (sin r)%cos r */ break; default: aplerr = 85; return; /* left invalid */ } /* end switch */ }