next up previous contents index
Next: How to define new Up: Additional expression evaluators Previous: Additional expression evaluators   Contents   Index


The expression evaluator using complex numbers

This expression evaluator is very similar to the usual one. It can be defined as the default one with the command ch_expr (cf. 7.7.3, 11).

The mathematical functions that the complex expression evaluator knows are in the array Funcs_C[] (it is an array of structures FUNCTIONC). This array must be defined by the user. The total number of functions is _NBFONC_C, which must be set by the user. An array of functions is predefined in the library, it is called Func_interp_C, and the number of functions defined in Func_interp is contained in the integer _NBFONC0_C.

FUNCTIONC Funcs_interp_C[] =
{
   /* name, funtion to call */
   { "Csin",    1,    _I_dCsin_c },        /* 0    */
   { "Ccos",    1,    _I_dCcos_c },        /* 1    */
   { "Ctan",    1,    _I_dCtan_c },        /* 2    */
   { "Csinh",   1,    _I_dCsinh_c },       /* 3    */
   { "Ccosh",   1,    _I_dCcosh_c },       /* 4    */
   { "Ctanh",   1,    _I_dCtanh_c },       /* 5    */
   { "Cexp",    1,    _I_dCexp_c },        /* 6    */
   { "Clog",    1,    _I_dClog_c },        /* 7    */
   { "Csqrt",   1,    _I_xdCsqrt },        /* 8    */
   { "Cabs",    1,    _I_CdCabs },         /* 9    */
   { 0 }                                   /* 10   */
};

int    _NBFONC0_C=10;

For instance if the program uses only the predefined array of functions, the main source file would look as follows :

 ......
FUNCTIONC *Funcs_C;

int main(int argc, char *argv[])
{ 
 ......
     Funcs_C = Funcs_interp_C;
     _NBFONC_C = _NBFONC0_C;
 ......
 }

The structure FUNCTIONC is defined as follows :

typedef struct
{
   char*      name;                   /* Function name                 */
   int        args;                   /* Number of arguments to expect */
   dcomplex   (*func)(dcomplex *);    /* Pointer to function           */
} FUNCTIONC;

Its first member is the character string that will be used to call the function. The second member is the number of parameters of the function. It must be between 1 and the constant MAX_F_ARGS defined in interp.h (it is 10). The third member is the name of the function. It must be a function returning a double precision complex value, having only one argument : an array of double precision complex numbers. In the first term of the array Func_interp_C the function _I_dCsin_c looks like this

dcomplex
_I_dCsin_c(dcomplex *x)
{
    return dCsin_c(*x);
}

(the function dCsin_c is defined in complex.c).


next up previous contents index
Next: How to define new Up: Additional expression evaluators Previous: Additional expression evaluators   Contents   Index
2009-11-12