Author: Antonio Dieguez
Date: 21:01:42 09/20/01
Go up one level in this thread
hi Dann if (turno==0) { if (eval0id1[indice]==p->idHashseg && eval0id2[indice]==p->idHashseg2) { return cualeval0[indice]; } } else { if (eval1id1[indice]==p->idHashseg && eval1id2[indice]==p->idHashseg2) { return cualeval1[indice]; } } you said to me the other day that putting &s there was faster in the profiling you did. That operations seemed expensive, I supose because are big arrays. And usually if one is false(wich I guess happen at least 80% of the time) then both are false. So I was puzzled why the & is faster there. be well. >>can you tell me? > >Depends on a zillion things. Sometimes, you cannot make that translation. > >For instance, if you want to substitute & for &&, then you must have both >operands be boolean (IOW: _ONLY_ take on the values 0 and/or 1). > >This is not a valid translation: >int a = 1; >int b = 2; > >if ((a && b) == (a & b) puts("My compiler is broken); > > >If the cost of evaluating the operands is very high, then it may be better to >use &&. > >Example: > >if (foo() && bar()) then foobar(); > >Suppose that foo() is fast, and bar() is really slow. Further, foo() is 0 most >of the time. Then you would rather have the short circuit evaluation and >branch. > >Missed branch predictions are expensive on newer chips, but it is not always an >easy thing to see when one method is faster than the other.
This page took 0.01 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.