File indexing completed on 2025-02-21 10:05:31
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
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