Mercurial > libavcodec.hg
changeset 2436:86d14aebd527 libavcodec
simplify
benchmark
author | michael |
---|---|
date | Mon, 17 Jan 2005 18:25:32 +0000 |
parents | c89ac0e70c66 |
children | 8a30df830ad6 |
files | eval.c |
diffstat | 1 files changed, 15 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- 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