xref: /original-bsd/usr.bin/f77/libF77/c_div.c (revision 5b10f61c)
1 /*
2  * Copyright (c) 1980 Regents of the University of California.
3  * All rights reserved.  The Berkeley software License Agreement
4  * specifies the terms and conditions for redistribution.
5  *
6  *	@(#)c_div.c	5.1	06/07/85
7  */
8 
9 #include "complex"
10 #include <stdio.h>
11 #include <errno.h>
12 
13 c_div(c, a, b)
14 complex *a, *b, *c;
15 {
16 double ratio, den;
17 double abr, abi;
18 
19 if( (abr = b->real) < 0.)
20 	abr = - abr;
21 if( (abi = b->imag) < 0.)
22 	abi = - abi;
23 if( abr <= abi )
24 	{
25 	if(abi == 0) {
26 		fprintf(stderr,"complex division by zero\n");
27 		f77_abort(EDOM);
28 	}
29 	ratio = b->real / b->imag ;
30 	den = b->imag * (1 + ratio*ratio);
31 	c->real = (a->real*ratio + a->imag) / den;
32 	c->imag = (a->imag*ratio - a->real) / den;
33 	}
34 
35 else
36 	{
37 	ratio = b->imag / b->real ;
38 	den = b->real * (1 + ratio*ratio);
39 	c->real = (a->real + a->imag*ratio) / den;
40 	c->imag = (a->imag - a->real*ratio) / den;
41 	}
42 
43 }
44