#include "complex.h" #include #include // Initialize 'z' void complex_init( complex_t *p_z, double real, double imag ) { p_z->re = real; p_z->im = imag; } // print 'z' int complex_printf( complex_t *p_z ) { if ( p_z->im >= 0.0 ) { return printf( "%f + %fj", p_z->re, p_z->im ); } else { return printf( "%f - %fj", p_z->re, -p_z->im ); } } // Add 'w' onto the first argument 'z' void complex_add( complex_t *p_z, complex_t w ) { p_z->re += w.re; p_z->im += w.im; } // Add 'r' onto the first argument 'z' void complex_add_real( complex_t *p_z, double r ) { p_z->re += r; } // Subtract 'w' from the first argument 'z' void complex_subtract( complex_t *p_z, complex_t w ) { p_z->re -= w.re; p_z->im -= w.im; } // Subtract 'r' from the first argument 'z' void complex_subtract_real( complex_t *p_z, double r ) { p_z->re -= r; } // Multiply the first argument 'z' by 'w' void complex_multiply( complex_t *p_z, complex_t w ) { double zre = p_z->re; p_z->re = p_z->re*w.re - p_z->im*w.im; p_z->im = zre*w.im + p_z->im*w.re; } // Multiply the first argument 'z' by 'r' void complex_multiply_real( complex_t *p_z, double r ) { p_z->re *= r; p_z->im *= r; } // Return the real part of the complex number 'z' double real( complex_t *p_z ) { return p_z->re; } // Return the imaginary part of the complex number 'z' double imag( complex_t *p_z ) { return p_z->im; } // Return the absolute value of the complex number 'z' double complex_abs( complex_t *p_z ) { return sqrt( p_z->re*p_z->re + p_z->im*p_z->im ); } // Return the absolute value of the complex number 'z' void conjugate( complex_t *p_z ) { p_z->im *= -1.0; } // Calculate the exponential of the complex number 'z' complex_t complex_exp( complex_t *p_z ) { complex_t w; double exp_z_re = exp( p_z->re ); w.re = exp_z_re*cos( p_z->im ); w.im = exp_z_re*sin( p_z->im ); return w; }