Commit | Line | Data |
---|---|---|
b12a212e | 1 | /* |
f164e020 RE |
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 %G% | |
b12a212e DW |
7 | */ |
8 | ||
9 | #include "complex" | |
50fd198f DL |
10 | #include <stdio.h> |
11 | #include <errno.h> | |
b12a212e DW |
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 | { | |
50fd198f DL |
25 | if(abi == 0) { |
26 | fprintf(stderr,"complex division by zero\n"); | |
27 | f77_abort(EDOM); | |
28 | } | |
b12a212e DW |
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 | } |