1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | Eval_arctan = ->
|
18 | push(cadr(p1))
|
19 | Eval()
|
20 | arctan()
|
21 |
|
22 | arctan = ->
|
23 | d = 0
|
24 |
|
25 | save()
|
26 |
|
27 | p1 = pop()
|
28 |
|
29 | if (car(p1) == symbol(TAN))
|
30 | push(cadr(p1))
|
31 | restore()
|
32 | return
|
33 |
|
34 | if (isdouble(p1))
|
35 | errno = 0
|
36 | d = Math.atan(p1.d)
|
37 | if (errno)
|
38 | stop("arctan function error")
|
39 | push_double(d)
|
40 | restore()
|
41 | return
|
42 |
|
43 | if (iszero(p1))
|
44 | push(zero)
|
45 | restore()
|
46 | return
|
47 |
|
48 | if (isnegative(p1))
|
49 | push(p1)
|
50 | negate()
|
51 | arctan()
|
52 | negate()
|
53 | restore()
|
54 | return
|
55 |
|
56 |
|
57 |
|
58 | if (Find(p1, symbol(SIN)) && Find(p1, symbol(COS)))
|
59 | push(p1)
|
60 | numerator()
|
61 | p2 = pop()
|
62 | push(p1)
|
63 | denominator()
|
64 | p3 = pop()
|
65 | if (car(p2) == symbol(SIN) && car(p3) == symbol(COS) && equal(cadr(p2), cadr(p3)))
|
66 | push(cadr(p2))
|
67 | restore()
|
68 | return
|
69 |
|
70 |
|
71 |
|
72 |
|
73 | if (car(p1) == symbol(POWER) && equaln(cadr(p1), 3) && equalq(caddr(p1), -1, 2)) or
|
74 | (car(p1) == symbol(MULTIPLY) && equalq(car(cdr(p1)), 1,3) and car(car(cdr(cdr(p1)))) == symbol(POWER) && equaln(car(cdr(car(cdr(cdr(p1))))),3) && equalq(car(cdr(cdr(car(cdr(cdr(p1)))))), 1, 2))
|
75 | push_rational(1, 6)
|
76 | if evaluatingAsFloats
|
77 | push_double(Math.PI)
|
78 | else
|
79 | push(symbol(PI))
|
80 | multiply()
|
81 | restore()
|
82 | return
|
83 |
|
84 |
|
85 |
|
86 | if (equaln(p1, 1))
|
87 | push_rational(1, 4)
|
88 | if evaluatingAsFloats
|
89 | push_double(Math.PI)
|
90 | else
|
91 | push(symbol(PI))
|
92 | multiply()
|
93 | restore()
|
94 | return
|
95 |
|
96 |
|
97 |
|
98 | if (car(p1) == symbol(POWER) && equaln(cadr(p1), 3) && equalq(caddr(p1), 1, 2))
|
99 | push_rational(1, 3)
|
100 | if evaluatingAsFloats
|
101 | push_double(Math.PI)
|
102 | else
|
103 | push(symbol(PI))
|
104 | multiply()
|
105 | restore()
|
106 | return
|
107 |
|
108 | push_symbol(ARCTAN)
|
109 | push(p1)
|
110 | list(2)
|
111 |
|
112 | restore()
|
113 |
|
114 |
|