/* 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); } }