newton/complex.c
josh b66b6aee38 initial commit, pthread support missing
git-svn-id: svn://anubis/misc/newton@17 bd8a9e45-a331-0410-811e-c64571078777
2007-11-29 03:48:43 +00:00

70 lines
1.4 KiB
C

/* Josh Holtrop
* 10/12/05
* Complex number functions
*/
#include "complex.h"
void complex_add(complex_t *c1, complex_t *c2, complex_t *result)
{
result->a = c1->a + c2->a;
result->b = c1->b + c2->b;
}
void complex_adds(complex_t *c1, double scalar, complex_t *result)
{
result->a = c1->a + scalar;
result->b = c1->b;
}
void complex_sub(complex_t *c1, complex_t *c2, complex_t *result)
{
result->a = c1->a - c2->a;
result->b = c1->b - c2->b;
}
void complex_subs(complex_t *c1, double scalar, complex_t *result)
{
result->a = c1->a - scalar;
result->b = c1->b;
}
void complex_mul(complex_t *c1, complex_t *c2, complex_t *result)
{
double a = c1->a * c2->a - c1->b * c2->b;
result->b = c1->a * c2->b + c2->a * c1->b;
result->a = a;
}
void complex_div(complex_t *c1, complex_t *c2, complex_t *result)
{
double a = c1->a, b = c1->b, c = c2->a, d = c2->b;
double ra = (a * c + b * d) / (c * c + d * d);
result->b = (c * b - a * d) / (c * c + d * d);
result->a = ra;
}
void complex_muls(complex_t *c, double scalar, complex_t *result)
{
result->a = c->a * scalar;
result->b = c->b * scalar;
}
void complex_divs(complex_t *c, double scalar, complex_t *result)
{
result->a = c->a / scalar;
result->b = c->b / scalar;
}
void complex_pow(complex_t *c, int n, complex_t *result)
{
/* Doesn't handle c^0 */
result->a = c->a;
result->b = c->b;
for ( ; n > 1; n--)
{
complex_mul(result, c, result);
}
}