UNPKG

1.08 kBtext/coffeescriptView Raw
1#-----------------------------------------------------------------------------
2#
3# Author : philippe.billet@noos.fr
4#
5# sgn sign function
6#
7#
8#-----------------------------------------------------------------------------
9
10
11
12Eval_sgn = ->
13 push(cadr(p1))
14 Eval()
15 sgn()
16
17sgn = ->
18 save()
19 yysgn()
20 restore()
21
22#define X p1
23
24yysgn = ->
25
26 p1 = pop()
27
28
29 if (isdouble(p1))
30 if (p1.d > 0)
31 push_integer(1)
32 return
33 else
34 if (p1.d == 0)
35 push_integer(1)
36 return
37 else
38 push_integer(-1)
39 return
40
41 if (isrational(p1))
42 if (MSIGN(mmul(p1.q.a,p1.q.b)) == -1)
43 push_integer(-1)
44 return
45 else
46 if (MZERO(mmul(p1.q.a,p1.q.b)))
47 push_integer(0)
48 return
49 else
50 push_integer(1)
51 return
52
53 if (iscomplexnumber(p1))
54 push_integer(-1)
55 push(p1)
56 absval()
57 power()
58 push(p1)
59 multiply()
60 return
61
62
63 if (isnegativeterm(p1))
64 push_symbol(SGN)
65 push(p1)
66 negate()
67 list(2)
68 push_integer(-1)
69 multiply()
70 return
71
72 ###
73 push_integer(2)
74 push(p1)
75 heaviside()
76 multiply()
77 push_integer(-1)
78 add()
79 ###
80
81 push_symbol(SGN)
82 push(p1)
83 list(2)
84
85