70 lines
1.4 KiB
C
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);
|
|
}
|
|
}
|
|
|