# HG changeset patch # User michael # Date 1105986332 0 # Node ID 86d14aebd527c97792b9e4136c5607c5f99c8ef1 # Parent c89ac0e70c66f30766f781c53bb6cfe200210a7c simplify benchmark diff -r c89ac0e70c66 -r 86d14aebd527 eval.c --- a/eval.c Sun Jan 16 22:11:47 2005 +0000 +++ b/eval.c Mon Jan 17 18:25:32 2005 +0000 @@ -141,15 +141,11 @@ return d; } - + static double evalPow(Parser *p){ - if(p->s[0]=='+') p->s++; - - if(p->s[0]=='-'){ - p->s++; - return -evalPrimary(p); - }else - return evalPrimary(p); + int sign= (*p->s == '+') - (*p->s == '-'); + p->s += sign&1; + return (sign|1) * evalPrimary(p); } static double evalFactor(Parser *p){ @@ -171,17 +167,15 @@ } static double evalExpression(Parser *p){ - double ret; + double ret= 0; if(p->stack_index <= 0) //protect against stack overflows return NAN; p->stack_index--; - ret= evalTerm(p); - while(p->s[0]=='+' || p->s[0]=='-'){ - if(*p->s++ == '+') ret+= evalTerm(p); - else ret-= evalTerm(p); - } + do{ + ret += evalTerm(p); + }while(*p->s == '+' || *p->s == '-'); p->stack_index++; @@ -220,6 +214,13 @@ 0 }; main(){ + int i; printf("%f == 12.7\n", ff_eval("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL)); + + for(i=0; i<1050; i++){ + START_TIMER + ff_eval("1+(5-2)^(3-1)+1/2+sin(PI)-max(-2.2,-3.1)", const_values, const_names, NULL, NULL, NULL, NULL, NULL); + STOP_TIMER("ff_eval") + } } #endif