/**
   * standard function for evaluation of general external functions
   *
   * @param operands
   * @param pointer to the global values (interpreter, function manager, graphics,...)
   * @return
   */
  public OperandToken evaluate(Token[] operands, GlobalValues globals) {

    // function works for one argument only
    if (getNArgIn(operands) != 1) throwMathLibException(name + " number of arguments < 1");

    // works on numbers only
    if (!(operands[0] instanceof DoubleNumberToken))
      throwMathLibException(name + " only works on numbers");

    // get number token
    DoubleNumberToken numOp = (DoubleNumberToken) operands[0];

    // get dimension of number token (2dimensional, 3dim, ....)
    int[] dim = numOp.getSize();

    // ceate array of correct size with dimensions "dim"
    DoubleNumberToken num = new DoubleNumberToken(dim, null, null);

    // call element evaluation for all values inside the DoubleNumberToken
    for (int i = 0; i < numOp.getNumberOfElements(); i++) {
      num.setValueComplex(i, evaluateValue(numOp.getValueComplex(i)));
    }

    return num;
  } // end evaluate