algebrite
Version:
Computer Algebra System in Coffeescript
86 lines (68 loc) • 1.08 kB
text/coffeescript
#-----------------------------------------------------------------------------
#
# Author : philippe.billet@noos.fr
#
# sgn sign function
#
#
#-----------------------------------------------------------------------------
Eval_sgn = ->
push(cadr(p1))
Eval()
sgn()
sgn = ->
save()
yysgn()
restore()
#define X p1
yysgn = ->
p1 = pop()
if (isdouble(p1))
if (p1.d > 0)
push_integer(1)
return
else
if (p1.d == 0)
push_integer(1)
return
else
push_integer(-1)
return
if (isrational(p1))
if (MSIGN(mmul(p1.q.a,p1.q.b)) == -1)
push_integer(-1)
return
else
if (MZERO(mmul(p1.q.a,p1.q.b)))
push_integer(0)
return
else
push_integer(1)
return
if (iscomplexnumber(p1))
push_integer(-1)
push(p1)
absval()
power()
push(p1)
multiply()
return
if (isnegativeterm(p1))
push_symbol(SGN)
push(p1)
negate()
list(2)
push_integer(-1)
multiply()
return
###
push_integer(2)
push(p1)
heaviside()
multiply()
push_integer(-1)
add()
###
push_symbol(SGN)
push(p1)
list(2)