xref: /csrg-svn/usr.bin/f77/libF77/c_div.c (revision 20187)
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