xref: /original-bsd/usr.bin/f77/libF77/z_div.c (revision f71cd02e)
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