-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCOMPLEX.lss
83 lines (77 loc) · 2.44 KB
/
COMPLEX.lss
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
74
75
76
77
78
79
80
81
82
83
<h1>COMPLEX - Complex numbers</h1>
Basic arithmetic on complex numbers. Not complete yet.
<h2>Uses</h2>
<<INCLUDES>>=
@
<<COMPLEX>>=
-PUBLIC COMPLEX(), R(), I()
*
DATA('COMPLEX(R,I)')
*
-PUBLIC ADD_COMPLEX(), MUL_COMPLEX(), NEG_COMPLEX(), INV_COMPLEX()
-PUBLIC PRINT_COMPLEX()
*
DEFINE('ADD_COMPLEX(X,Y)')
DEFINE('MUL_COMPLEX(X,Y)A,B,C,D')
DEFINE('NEG_COMPLEX(X)')
DEFINE('INV_COMPLEX(X)D')
DEFINE('PRINT_COMPLEX(X)SIGN') :(COMPLEX_END)
*
ADD_COMPLEX
ADD_COMPLEX = COMPLEX(R(X) + R(Y), I(X) + I(Y)) :(RETURN)
*
MUL_COMPLEX
A = R(X); B = I(X); C = R(Y); D = I(Y)
MUL_COMPLEX = COMPLEX(A * C - B * D, B * C + A * D) :(RETURN)
*
NEG_COMPLEX
NEG_COMPLEX = COMPLEX(-R(X), -I(X)) :(RETURN)
*
INV_COMPLEX
D = (R(X) * R(X)) + (I(X) * I(X))
INV_COMPLEX = COMPLEX(1.0 * R(X) / D, 1.0 * -I(X) / D)
+ :(RETURN)
*
PRINT_COMPLEX
SIGN = GE(I(X)) '+'
PRINT_COMPLEX = R(X) SIGN I(X) 'i' :(RETURN)
*
COMPLEX_END
@
<<unit_test>>=
#!/usr/bin/bash
exec "snobol4" "-b" "$0" "$@"
-INCLUDE 'COMPLEX.INC'
&CODE = 1
&CODE = 0
END
@
<<>>=
-MODULE COMPLEX
<<INCLUDES>>
-IN72
-STITL COMPLEX
-EJECT
*
************************************************************************
* *
* *
* ##### ####### # # ###### # ####### # # *
* # # # # ## ## # # # # # # *
* # # # # # # # # # # # # # *
* # # # # # # ###### # ##### # *
* # # # # # # # # # # *
* # # # # # # # # # # # *
* ##### ####### # # # ####### ####### # # *
* *
* *
* COMPLEX COMPLEX NUMBERS *
* *
************************************************************************
*
* COMPLEX.lss
*
<<COMPLEX>>
*
* CE: .MSNOBOL4;
@