1 /* 2 * "@(#)z_div.c 1.2" 3 */ 4 5 #include "complex" 6 #include <stdio.h> 7 #include <errno.h> 8 9 z_div(c, a, b) 10 dcomplex *a, *b, *c; 11 { 12 double ratio, den; 13 double abr, abi; 14 15 if( (abr = b->dreal) < 0.) 16 abr = - abr; 17 if( (abi = b->dimag) < 0.) 18 abi = - abi; 19 if( abr <= abi ) 20 { 21 if(abi == 0) { 22 fprintf( stderr, "Double complex division by zero\n" ); 23 f77_abort(EDOM); 24 } 25 ratio = b->dreal / b->dimag ; 26 den = b->dimag * (1 + ratio*ratio); 27 c->dreal = (a->dreal*ratio + a->dimag) / den; 28 c->dimag = (a->dimag*ratio - a->dreal) / den; 29 } 30 31 else 32 { 33 ratio = b->dimag / b->dreal ; 34 den = b->dreal * (1 + ratio*ratio); 35 c->dreal = (a->dreal + a->dimag*ratio) / den; 36 c->dimag = (a->dimag - a->dreal*ratio) / den; 37 } 38 39 } 40