/* complex.c - a small library for doing complex algebra in C. * * (C) Copyright 2001 by NetGroup A/S. All rights reserved. * * $Log$ * Revision 1.1 2006/06/20 15:57:22 djburke * Hopefully a saner way to build Basic/MatrixOps * * Revision 1.1 2005/01/08 09:22:57 zowie * Added non-symmetric matrices to eigens; updated version to 2.4.2cvs. * * Revision 1.1.1.1 2001/07/06 13:39:35 kneth * Initial import of code. * * */ #include #include "complex.h" void SSL_ComplexAssign(double re, double im, SSL_Complex *z) { z->re=re; z->im=im; } /* SSL_ComplexAssign */ void SSL_ComplexAdd(SSL_Complex z1, SSL_Complex z2, SSL_Complex *res) { res->re=z1.re+z2.re; res->im=z1.im+z2.im; } /* SSL_ComplexAdd */ void SSL_ComplexSub(SSL_Complex z1, SSL_Complex z2, SSL_Complex *res) { res->re=z1.re-z2.re; res->im=z1.im-z2.im; } /* SSL_ComplexSub */ void SSL_ComplexMul(SSL_Complex z1, SSL_Complex z2, SSL_Complex *res) { res->re=z1.re*z2.re-z1.im*z2.im; res->im=z1.re*z2.im+z1.im*z2.re; } /* SSL_ComplexMul */ void SSL_ComplexDiv(SSL_Complex a, SSL_Complex b, SSL_Complex *res) { double temp; temp=b.re*b.re+b.im*b.im; res->re=(a.re*b.re+a.im*b.im)/temp; res->im=(a.im*b.re-a.re*b.im)/temp; } /* SSL_ComplexDiv */ double SSL_ComplexNorm(SSL_Complex z) { return (sqrt(z.re*z.re+z.im*z.im)); } /* SSL_ComplexNorm */ double SSL_ComplexArg(SSL_Complex z) { return (atan2(z.im, z.re)); } /* SSL_ComplexArg */