110443Sdlw /* 2*20187Slibs * "@(#)c_div.c 1.2" 310443Sdlw */ 410443Sdlw 510443Sdlw #include "complex" 6*20187Slibs #include <stdio.h> 7*20187Slibs #include <errno.h> 810443Sdlw 910443Sdlw c_div(c, a, b) 1010443Sdlw complex *a, *b, *c; 1110443Sdlw { 1210443Sdlw double ratio, den; 1310443Sdlw double abr, abi; 1410443Sdlw 1510443Sdlw if( (abr = b->real) < 0.) 1610443Sdlw abr = - abr; 1710443Sdlw if( (abi = b->imag) < 0.) 1810443Sdlw abi = - abi; 1910443Sdlw if( abr <= abi ) 2010443Sdlw { 21*20187Slibs if(abi == 0) { 22*20187Slibs fprintf(stderr,"complex division by zero\n"); 23*20187Slibs f77_abort(EDOM); 24*20187Slibs } 2510443Sdlw ratio = b->real / b->imag ; 2610443Sdlw den = b->imag * (1 + ratio*ratio); 2710443Sdlw c->real = (a->real*ratio + a->imag) / den; 2810443Sdlw c->imag = (a->imag*ratio - a->real) / den; 2910443Sdlw } 3010443Sdlw 3110443Sdlw else 3210443Sdlw { 3310443Sdlw ratio = b->imag / b->real ; 3410443Sdlw den = b->real * (1 + ratio*ratio); 3510443Sdlw c->real = (a->real + a->imag*ratio) / den; 3610443Sdlw c->imag = (a->imag - a->real*ratio) / den; 3710443Sdlw } 3810443Sdlw 3910443Sdlw } 40