Metropoli BBS
VIEWER: logx.c MODE: TEXT (ASCII)
/* Copyright (C) 1994 by Thomas Glen Smith.	All Rights Reserved. */
/* logx APL2 V1.0.0 ****************************************************
* Called by logrithx.  Logarithms for complex numbers.                 *
* For any s of magnitude p, angle q, the natural log of s, @s, is -    *
* @p+iXq, where -                                                      *
* i = square root of -1.                                               *
* s = a + bXi, a and b being real number coefficients.                 *
* p = dabsx(s) = magnitude.                                            *
* q = atan b%a = -7 O b%a                                              *
***********************************************************************/
#define INCLUDES MATH
#include "includes.h"
#define ABS(v) ((v) > 0e0 ? (v) : -(v))
void logx(num,ret)
double *num, *ret;
{
	Dabsx;
	static double pi = 3.14159265358979323846;
	static double halfpi = 1.570796632679489661923;
	static double iii[2]={0.0,1.0};
	extern double fuzz;
	double a, b, babs, p[2];

	a = *num;		/* Real part coefficient. */
	b = *(num+1);	/* Imaginary part coefficient. */
	babs = ABS(b);
	if (babs < fuzz && a > 0) { /* Imaginary part = 0. */
		*ret = log(a);
		*(ret+1) = 0e0;
	} else {
		dabsx(num,p);
		*ret = log(*p);
		if (a == 0e0)
			*(ret+1) = (b < 0e0) ? -halfpi : halfpi;
		else *(ret+1) = atan2(b,a);
	}
}
[ RETURN TO DIRECTORY ]