43 lines
1021 B
Plaintext
43 lines
1021 B
Plaintext
(load "@lib/math.l")
|
|
|
|
(de addComplex (A B)
|
|
(cons
|
|
(+ (car A) (car B)) # Real
|
|
(+ (cdr A) (cdr B)) ) ) # Imag
|
|
|
|
(de mulComplex (A B)
|
|
(cons
|
|
(-
|
|
(*/ (car A) (car B) 1.0)
|
|
(*/ (cdr A) (cdr B) 1.0) )
|
|
(+
|
|
(*/ (car A) (cdr B) 1.0)
|
|
(*/ (cdr A) (car B) 1.0) ) ) )
|
|
|
|
(de invComplex (A)
|
|
(let Denom
|
|
(+
|
|
(*/ (car A) (car A) 1.0)
|
|
(*/ (cdr A) (cdr A) 1.0) )
|
|
(cons
|
|
(*/ (car A) 1.0 Denom)
|
|
(- (*/ (cdr A) 1.0 Denom)) ) ) )
|
|
|
|
(de negComplex (A)
|
|
(cons (- (car A)) (- (cdr A))) )
|
|
|
|
(de fmtComplex (A)
|
|
(pack
|
|
(round (car A) (dec *Scl))
|
|
(and (gt0 (cdr A)) "+")
|
|
(round (cdr A) (dec *Scl))
|
|
"i" ) )
|
|
|
|
(let (A (1.0 . 1.0) B (cons pi 1.2))
|
|
(prinl "A = " (fmtComplex A))
|
|
(prinl "B = " (fmtComplex B))
|
|
(prinl "A+B = " (fmtComplex (addComplex A B)))
|
|
(prinl "A*B = " (fmtComplex (mulComplex A B)))
|
|
(prinl "1/A = " (fmtComplex (invComplex A)))
|
|
(prinl "-A = " (fmtComplex (negComplex A))) )
|