2021-10-11 18:20:23 -03:00

152 lines
2.1 KiB
C

#ifndef lint
static char sccsid[] = "@(#)zomplex.c 1.1 92/07/30 SMI";
#endif
/*
* Copyright (c) 1987 by Sun Microsystems, Inc.
*/
# include "complex.h"
_Fz_div (c, a, b)
dcomplex *a, *b, *c;
{
register double ar, ai, br, bi;
register double ratio, den;
br = b->dreal;
bi = b->dimag;
ar = a->dreal;
ai = a->dimag;
if (iszero(bi)) {
c->dreal = ar / br;
c->dimag = ai / br;
return;
}
if (fabs(br) <= fabs(bi)) {
ratio = br / bi;
den = bi + br * ratio;
c->dreal = (ar * ratio + ai) / den;
c->dimag = (ai * ratio - ar) / den;
} else {
ratio = bi / br;
den = br + bi * ratio;
c->dreal = (ar + ai * ratio) / den;
c->dimag = (ai - ar * ratio) / den;
}
}
_Fz_mult(dc, a, b)
dcomplex *a, *b, *dc;
{
dc->dreal = (a->dreal * b->dreal) - (a->dimag * b->dimag);
dc->dimag = (a->dreal * b->dimag) + (a->dimag * b->dreal);
}
_Fz_minus(dc, a, b)
dcomplex *a, *b, *dc;
{
dc->dreal = a->dreal - b->dreal;
dc->dimag = a->dimag - b->dimag;
}
_Fz_add(dc, a, b)
dcomplex *a, *b, *dc;
{
dc->dreal = a->dreal + b->dreal;
dc->dimag = a->dimag + b->dimag;
}
_Fz_neg(dc, a)
dcomplex *dc, *a;
{
dc->dreal = - a->dreal;
dc->dimag = - a->dimag;
}
/* convert float to double complex */
_Ff_conv_z(dc,f)
dcomplex *dc;
FLOATPARAMETER f;
{
dc->dreal = FLOATPARAMETERVALUE(f);
dc->dimag = 0.0;
}
/* convert double complex to float */
FLOATFUNCTIONTYPE
_Fz_conv_f(dc)
dcomplex *dc;
{
float f ;
f = dc->dreal ;
RETURNFLOAT(f);
}
/* convert double complex to int */
int
_Fz_conv_i(dc)
dcomplex *dc;
{
return (int)dc->dreal;
}
/* convert int to double complex */
_Fi_conv_z(dc,i)
dcomplex *dc;
int i;
{
dc->dreal = (double)i;
dc->dimag = 0.0;
}
/* convert double complex to double */
double
_Fz_conv_d(dc)
dcomplex *dc;
{
return dc->dreal;
}
/* convert double to double complex */
_Fd_conv_z(dc,d)
dcomplex *dc;
double d;
{
dc->dreal = d;
dc->dimag = 0.0;
}
/* convert double complex to complex */
void
_Fz_conv_c(c,dc)
complex *c;
dcomplex *dc;
{
c->real = (float)dc->dreal;
c->imag = (float)dc->dimag;
}