// Complex Division c = a / b complex_t complex_div(complex_t a, complex_t b) { complex_t c; complex_t nu = complex_mul(a,complex_conj(b)); complex_t dn = complex_mul(b,complex_conj(b)); c.real = nu.real/dn.real; c.imag = nu.imag/dn.real; return c; }
void test_complex() { complexFloat c = complex_new(1,2); CU_ASSERT(c.real==1); CU_ASSERT(c.imag==2); complexFloat d = complex_add(c,complex_zero()); CU_ASSERT(d.real==1); CU_ASSERT(d.imag==2); d = complex_sub(c,complex_new(-1,-2)); CU_ASSERT(d.real==2); CU_ASSERT(d.imag==4); CU_ASSERT(within_tol(complex_amp(c),sqrt(5))); CU_ASSERT(within_tol(complex_amp(d),sqrt(20))); CU_ASSERT(within_tol(complex_amp_sqr(c),5)); CU_ASSERT(within_tol(complex_amp_sqr(d),20)); CU_ASSERT(within_tol(complex_amp(complex_scale(d,.5)),sqrt(5))); d = complex_conj(c); CU_ASSERT(d.real==1); CU_ASSERT(d.imag==-2); complexFloat e = complex_conj(complex_add(d,complex_conj(c))); CU_ASSERT(e.real==2); CU_ASSERT(e.imag==4); complexVector v = complex_vector_new(c,d,e); CU_ASSERT(v.A.real==1); CU_ASSERT(v.A.imag==2); CU_ASSERT(v.B.real==1); CU_ASSERT(v.B.imag==-2); CU_ASSERT(v.C.real==2); CU_ASSERT(v.C.imag==4); complexVector vc = complex_vector_conj(v); CU_ASSERT(vc.A.real==1); CU_ASSERT(vc.A.imag==-2); CU_ASSERT(vc.B.real==1); CU_ASSERT(vc.B.imag==2); CU_ASSERT(vc.C.real==2); CU_ASSERT(vc.C.imag==-4); }