anchor.diff:             ("phi",        S ) -> [(math:sqrt(5)+1)/2|S];
              ("i",          S ) -> [{0,1}|S];
   
  -           ("sin",   [{A,B}|S]) -> [{math:sin(A)*math:cosh(B), math:cos(A)*math:sinh(B)}|S];
  -           ("cos",   [{A,B}|S]) -> [{math:cos(A)*math:cosh(B), -math:sin(A)*math:sinh(B)}|S];
  -           ("tan",   [{A,B}|S]) -> rpn("/", rpn("cos",[{A,B}]) ++ rpn("sin",[{A,B}])) ++ S;
  -           ("sin",   [X    |S]) -> [math:sin(X*math:pi()/180)|S];
  -           ("cos",   [X    |S]) -> [math:cos(X*math:pi()/180)|S];
  -           ("tan",   [X    |S]) -> [math:tan(X*math:pi()/180)|S];
  +           ("sin",   [{A,B}|S])   -> [{math:sin(A)*math:cosh(B), math:cos(A)*math:sinh(B)}|S];
  +           ("cos",   [{A,B}|S])   -> [{math:cos(A)*math:cosh(B), -math:sin(A)*math:sinh(B)}|S];
  +           ("tan",   [{_,_}=X|S]) -> rpn("/", rpn("cos",[X]) ++ rpn("sin",[X])) ++ S;
  +           ("sin",   [X    |S])   -> [math:sin(X*math:pi()/180)|S];
  +           ("cos",   [X    |S])   -> [math:cos(X*math:pi()/180)|S];
  +           ("tan",   [X    |S])   -> [math:tan(X*math:pi()/180)|S];
   
              % % asin, acos, atan for complex ?
              % ("asin",  [{A,B}|S]) -> [math:asin(X)*180/math:pi()|S];
  
positive.code:            ("acos",  [X  |S]) -> [math:acos(X)*180/math:pi()|S];
             ("atan",  [X  |S]) -> [math:atan(X)*180/math:pi()|S];
  
             ("sinh",  [{A,B}|S]) -> [{math:sinh(A)*math:cos(B), math:cosh(A)*math:sin(B)}|S];
             ("cosh",  [{A,B}|S]) -> [{math:cosh(A)*math:cos(B), math:sinh(A)*math:sin(B)}|S];
             ("tanh",  [{A,B}|S]) -> rpn("/", rpn("cosh",[{A,B}]) ++ rpn("sinh", [{A,B}])) ++ S;
             ("sinh",  [X    |S]) -> [math:sinh(X)|S];
             ("cosh",  [X    |S]) -> [math:cosh(X)|S];
             ("tanh",  [X    |S]) -> [math:tanh(X)|S];
  
             % asinh, acosh, atanh for complex ?
             ("asinh", [X  |S]) -> [math:asinh(X)|S];
  
negative.code:            ("%",     [0,_|_]) -> throw("division by zero");
             ("%",     [X,Y|S]) -> [Y rem X|S];
  
             ("**",    [{C,D},{_,_}=Y|S]) -> [R] = rpn("abs",[Y]),
                                             [Theta] = rpn("arg",[Y]),
                                             Multiplier = math:exp(C*math:log(R) - D*Theta),
                                             [{Multiplier*math:cos(D*math:log(R) + C*Theta), Multiplier*math:sin(D*math:log(R) + C*Theta)}|S];
             ("**",    [X,{_,_}=Y    |S]) -> [R] = rpn("abs",[Y]),
                                             [Theta] = rpn("arg",[Y]),
                                             [{math:pow(R,X)*math:cos(Theta*X), math:pow(R,X)*math:sin(Theta*X)}|S];
             ("**",    [{A,B},Y      |S]) -> [{math:pow(Y,A)*math:cos(B*math:log(Y)), math:pow(Y,A)*math:sin(B*math:log(Y))}|S];
             ("**",    [X,Y          |S]) -> [math:pow(Y,X)|S];
  
             ("chs",   [{A,B}|S]) -> [{-A, -B}|S];
             ("chs",   [X    |S]) -> [-X|S];
  