anchor.diff:  ilogn (N) ->
     {primop, 'ilogn', [N]}.
   
  +?primop1('floor').
  +?primop1('ceil').
  +
  +?primop1('sin').
  +?primop1('cos').
  +?primop1('tan').
  +?primop1('asin').
  +?primop1('acos').
  +?primop1('atan').
  +?primop2('atan2').
  +?primop1('sinh').
  +?primop1('cosh').
  +?primop1('tanh').
  +?primop1('asinh').
  +?primop1('acosh').
  +?primop1('atanh').
  +?primop1('exp').
  +?primop1('log').
  +?primop1('log10').
  +?primop1('pow').
  +?primop1('sqrt').
   
   %%----------------------------------------------------------------------------
   %% @doc Return the Erlang function evaluating the primitive operation.
  
positive.code:     (0) -> 0;
      (X) -> round(math:log(X) / math:log(2))
    end;
  f(Op) ->
    fun erlang:Op/2.
  
negative.code: -export([mod/2]).
  -export([ilogn/1]).
  
  -export([floor/1, ceil/1]).
  
  -export([f/1]).
  
  -define(primop1(Name),
          Name (N) -> {primop, Name, [N]}).
  -define(primop2(Name),
          Name (N,M) -> {primop, Name, [N,M]}).
  
  %%----------------------------------------------------------------------------
  %% Functions for creating the AST nodes of primitive operations
  