Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-02-21 10:05:31

0001 /*
0002  *  template_op_num.c  --
0003  *  Evaluation of numeric operators
0004  *
0005  *  Original: 25-Nov-1994 16:55
0006  *
0007  *  Author:   Maarten Ballintijn <Maarten.Ballintijn@cern.ch>
0008  *
0009  *  $Id$
0010  *
0011  *  $Log$
0012  *  Revision 1.4  1997/01/21 16:43:57  couet
0013  *  - ** is now working for float constant also
0014  *
0015  *  Revision 1.3  1996/04/23 18:38:23  maartenb
0016  *  - Add RCS keywords
0017  *
0018  *
0019  */
0020     case FC_PLUS:
0021         r->u.OP_FIELD = valv[0]->u.OP_FIELD + valv[1]->u.OP_FIELD;
0022         r->d = dim_new( OP_DTYPE );
0023         break;
0024 
0025     case FC_MINUS:
0026         r->u.OP_FIELD = valv[0]->u.OP_FIELD - valv[1]->u.OP_FIELD;
0027         r->d = dim_new( OP_DTYPE );
0028         break;
0029 
0030     case FC_TIMES:
0031         r->u.OP_FIELD = valv[0]->u.OP_FIELD * valv[1]->u.OP_FIELD;
0032         r->d = dim_new( OP_DTYPE );
0033         break;
0034 
0035     case FC_DIV:
0036         if ( valv[1]->u.OP_FIELD != 0 ) {
0037             r->u.OP_FIELD = valv[0]->u.OP_FIELD /
0038                         valv[1]->u.OP_FIELD;
0039         } else {
0040             sf_report( "eval_template: divide by zero\n" );
0041             *err = R_MATH_ERROR;
0042             r->u.OP_FIELD = 0;
0043         }
0044         r->d = dim_new( OP_DTYPE );
0045         break;
0046 
0047     case FC_POW:
0048         if ( valv[1]->d->dtyp == D_DOUBLE ) {
0049             r->u.fval = pow( valv[0]->u.fval, valv[1]->u.fval);
0050         } else if ( valv[1]->d->dtyp == D_FLOAT ) {
0051                         double value1;
0052                         double value2;
0053             value1 = (double)valv[0]->u.fval;
0054             value2 = (double)valv[1]->u.fval;
0055             r->u.fval = pow( value1, value2);
0056         } else {
0057             sf_report( "eval_template: power only for float or double\n" );
0058             *err = R_MATH_ERROR;
0059             r->u.OP_FIELD = 0;
0060         }
0061         r->d = dim_new( OP_DTYPE );
0062         break;
0063 
0064     case FC_UMINUS:
0065         r->u.OP_FIELD = -valv[0]->u.OP_FIELD;
0066         r->d = dim_new( datatype_signed[OP_DTYPE] );
0067         break;
0068 
0069     case FC_MIN:
0070         if (  valv[0]->u.OP_FIELD <= valv[1]->u.OP_FIELD ) {
0071             r->u.OP_FIELD = valv[0]->u.OP_FIELD;
0072         } else {
0073             r->u.OP_FIELD = valv[1]->u.OP_FIELD;
0074         }
0075         r->d = dim_new( OP_DTYPE );
0076         break;
0077 
0078     case FC_MAX:
0079         if (  valv[0]->u.OP_FIELD <= valv[1]->u.OP_FIELD ) {
0080             r->u.OP_FIELD = valv[1]->u.OP_FIELD;
0081         } else {
0082             r->u.OP_FIELD = valv[0]->u.OP_FIELD;
0083         }
0084         r->d = dim_new( OP_DTYPE );
0085         break;
0086