79 lines
1.8 KiB
Text
79 lines
1.8 KiB
Text
(scl 16)
|
|
(load "@lib/math.l")
|
|
(setq *B 7)
|
|
(de from_y (Y)
|
|
(let
|
|
(A (* 1.0 (- (* Y Y) *B))
|
|
B (pow (abs A) (*/ 1.0 1.0 3.0)) )
|
|
(list
|
|
(if (gt0 A) B (- B))
|
|
(* Y 1.0) ) ) )
|
|
(de prn (P)
|
|
(if (is_zero P)
|
|
"Zero"
|
|
(pack
|
|
(round (car P) 3)
|
|
" "
|
|
(round (cadr P) 3) ) ) )
|
|
(de neg (P)
|
|
(list (car P) (*/ -1.0 (cadr P) 1.0)) )
|
|
(de is_zero (P)
|
|
(or
|
|
(=T (car P))
|
|
(=T (cadr P))
|
|
(> (length (car P)) 20) ) )
|
|
(de dbl (P)
|
|
(if (is_zero P)
|
|
P
|
|
(let
|
|
(Y
|
|
(*/
|
|
1.0
|
|
(*/ 3.0 (car P) (car P) (** 1.0 2))
|
|
(*/ 2.0 (cadr P) 1.0) )
|
|
X
|
|
(-
|
|
(*/ Y Y 1.0)
|
|
(*/ 2.0 (car P) 1.0) ) )
|
|
(list
|
|
X
|
|
(-
|
|
(*/ Y (- (car P) X) 1.0)
|
|
(cadr P) ) ) ) ) )
|
|
(de add (A B)
|
|
(cond
|
|
((= A B) (dbl A))
|
|
((is_zero A) B)
|
|
((is_zero B) A)
|
|
(T
|
|
(let Z (- (car B) (car A))
|
|
(if (=0 Z)
|
|
(list T T)
|
|
(let
|
|
(Y (*/ 1.0 (- (cadr B) (cadr A)) Z)
|
|
X
|
|
(- (*/ Y Y 1.0) (car A) (car B)) )
|
|
(list
|
|
X
|
|
(-
|
|
(*/ Y (- (car A) X) 1.0)
|
|
(cadr A) ) ) ) ) ) ) ) )
|
|
(de mul (P N)
|
|
(let R (list T T)
|
|
(for (I 1 (>= N I) (* I 2))
|
|
(when (gt0 (& I N))
|
|
(setq R (add R P)) )
|
|
(setq P (dbl P)) )
|
|
R ) )
|
|
(setq
|
|
A (from_y 1)
|
|
B (from_y 2) )
|
|
(prinl "A: " (prn A))
|
|
(prinl "B: " (prn B))
|
|
(setq C (add A B))
|
|
(prinl "C: " (prn C))
|
|
(setq D (neg C))
|
|
(prinl "D: " (prn D))
|
|
(prinl "D + C: " (prn (add C D)))
|
|
(prinl "A + B + D: " (prn (add A (add B D))))
|
|
(prinl "A * 12345: " (prn (mul A 12345)))
|