1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
/*
* -- SuperLU routine (version 2.0) --
* Univ. of California Berkeley, Xerox Palo Alto Research Center,
* and Lawrence Berkeley National Lab.
* November 15, 1997
*
*/
#ifndef __SUPERLU_SCOMPLEX /* allow multiple inclusions */
#define __SUPERLU_SCOMPLEX
/*
* This header file is to be included in source files c*.c
*/
#ifndef SCOMPLEX_INCLUDE
#define SCOMPLEX_INCLUDE
typedef struct { float r, i; } complex;
/* Macro definitions */
/* Complex Addition c = a + b */
#define c_add(c, a, b) { (c)->r = (a)->r + (b)->r; \
(c)->i = (a)->i + (b)->i; }
/* Complex Subtraction c = a - b */
#define c_sub(c, a, b) { (c)->r = (a)->r - (b)->r; \
(c)->i = (a)->i - (b)->i; }
/* Complex-Double Multiplication */
#define cs_mult(c, a, b) { (c)->r = (a)->r * (b); \
(c)->i = (a)->i * (b); }
/* Complex-Complex Multiplication */
#define cc_mult(c, a, b) { \
float cr, ci; \
cr = (a)->r * (b)->r - (a)->i * (b)->i; \
ci = (a)->i * (b)->r + (a)->r * (b)->i; \
(c)->r = cr; \
(c)->i = ci; \
}
#define cc_conj(a, b) { \
(a)->r = (b)->r; \
(a)->i = -((b)->i); \
}
/* Complex equality testing */
#define c_eq(a, b) ( (a)->r == (b)->r && (a)->i == (b)->i )
#ifdef __cplusplus
extern "C" {
#endif
/* Prototypes for functions in scomplex.c */
void c_div(complex *, complex *, complex *);
double c_abs(complex *); /* exact */
double c_abs1(complex *); /* approximate */
void c_exp(complex *, complex *);
void r_cnjg(complex *, complex *);
double r_imag(complex *);
#ifdef __cplusplus
}
#endif
#endif
#endif /* __SUPERLU_SCOMPLEX */
|