Metropoli BBS
VIEWER: circulax.c MODE: TEXT (ASCII)
/* 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) */
}
[ RETURN TO DIRECTORY ]