|
|
1.1 root 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: * @(#)z_div.c 5.2 11/3/86
7: */
8:
9: #include "complex"
10: #include <stdio.h>
11: #include <errno.h>
12: #ifdef tahoe
13: #include <tahoemath/FP.h>
14: #endif tahoe
15:
16: z_div(c, a, b)
17: dcomplex *a, *b, *c;
18: {
19: double ratio, den;
20: double abr, abi;
21:
22: #ifndef tahoe
23: if( (abr = b->dreal) < 0.)
24: abr = - abr;
25: if( (abi = b->dimag) < 0.)
26: abi = - abi;
27: #else tahoe
28: if( (abr = b->dreal) < 0.)
29: *((long int *)&abr) ^= SIGN_BIT;
30: if( (abi = b->dimag) < 0.)
31: *((long int *)&abi) ^= SIGN_BIT;
32: #endif tahoe
33: if( abr <= abi )
34: {
35: if(abi == 0) {
36: fprintf( stderr, "Double complex division by zero\n" );
37: f77_abort(EDOM);
38: }
39: ratio = b->dreal / b->dimag ;
40: den = b->dimag * (1 + ratio*ratio);
41: c->dreal = (a->dreal*ratio + a->dimag) / den;
42: c->dimag = (a->dimag*ratio - a->dreal) / den;
43: }
44:
45: else
46: {
47: ratio = b->dimag / b->dreal ;
48: den = b->dreal * (1 + ratio*ratio);
49: c->dreal = (a->dreal + a->dimag*ratio) / den;
50: c->dimag = (a->dimag - a->dreal*ratio) / den;
51: }
52:
53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.