/
vz.h
63 lines (54 loc) · 2.24 KB
/
vz.h
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
/* Copyright 1990-2011, Jsoftware Inc. All rights reserved. */
/* License in license.txt. */
/* */
/* Complex Numbers */
#define THMAX 5.9631365372958016e8
#define EMAX 709.78271289338409
#define EMIN -744.44007192138126
#define EMAX2 710.47586007394398
#define TMAX 19.066172834610153
/* THMAX: 2p1*2^b%2 where b is # bits in significand */
/* EMAX: largest number where _>^EMAX; 1024*^.2 */
/* EMIN: smallest number where 0<^EMIN; _1074*^.2 */
/* EMAX2: largest number where _>cosh EMAX2; EMAX+^.2 */
/* TMAX: smallest number where 1=tanh TMAX */
#define ZF1DECL Z z;D zr=0.0,zi=0.0,a=v.re,b=v.im
#define ZF2DECL Z z;D zr=0.0,zi=0.0,a=u.re,b=u.im,c=v.re,d=v.im
#define ZEPILOG z.re=zr; z.im=zi; R z
#define ZF1(f) Z f(J jt,Z v)
#define ZF2(f) Z f(J jt,Z u,Z v)
#define ZS1(f,stmts) ZF1(f){ZF1DECL; stmts; ZEPILOG;}
#define ZS2(f,stmts) ZF2(f){ZF2DECL; stmts; ZEPILOG;}
#define MMM(a,b) {p=ABS(a); q=ABS(b); if(p<q){D t=p; p=q; q=t;}}
#define ZASSERT(b,e) {if(!(b)){jsignal(e); R zeroZ;}}
#define ZNZ(v) ( (v).re||(v).im )
#define ZEZ(v) (!((v).re||(v).im))
#define ZINF(v) (inf==(v).re||inf==(v).im||infm==(v).re||infm==(v).im)
#define ZCJ(u,v) ((u).re==(v).re && (u).im==-(v).im)
#define ZOV(v) (ABS((v).re)> OVERFLOW||ABS((v).im)> OVERFLOW)
#define ZUN(v) (ABS((v).re)<UNDERFLOW||ABS((v).im)<UNDERFLOW)
#define ZRE(x,y) ((x).re*(y).re-(x).im*(y).im)
#define ZIM(x,y) ((x).re*(y).im+(x).im*(y).re)
extern ZF1(jtzceil);
extern ZF1(jtzconjug);
extern ZF1(jtzexp);
extern ZF1(jtzlog);
extern ZF1(jtznegate);
extern ZF1(jtznonce1);
extern ZF1(jtzsqrt);
extern ZF1(jtztrend);
extern ZF1(jtzfloor);
extern ZF2(jtzcir);
extern ZF2(jtzdiv);
extern ZF2(jtzgcd);
extern ZF2(jtzlcm);
extern ZF2(jtzminus);
extern ZF2(jtznonce2);
extern ZF2(jtzplus);
extern ZF2(jtzpow);
extern ZF2(jtzrem);
extern ZF2(jtztymes);
extern B jtzeq(J,Z,Z);
extern B jtztridiag(J,I,A,A);
extern D zmag(Z);
extern Z zrj0(D);