Which conditional expression is faster?


Closed Thread
Results 1 to 5 of 5
  1. #1
    Join Date
    Aug 2006
    Location
    Omaha, Nebraska USA
    Posts
    263

    Default Which conditional expression is faster?

    Which of these is faster to execute?

    IF A+B+C=0 THEN . . .

    or

    IF A=0 AND B=0 AND C=0 THEN . . .
    Russ
    N0EVC, xWB6ONT, xWN6ONT

    "Easy to use" is easy to say.

  2. #2
    Join Date
    Nov 2003
    Location
    Wellton, U.S.A.
    Posts
    5,924


    Did you find this post helpful? Yes | No

    Default

    This is faster
    IF A+B+C=0
    The generated ASM
    Code:
    ADD?BBW	_A, _B, T1
    ADD?WBW	T1, _C, T1
    CMPNE?WCL	T1, 000h, L00001
    This
    IF A=0 AND B=0 AND C=0 THEN
    Generates
    Code:
    CMPEQ?BCB	_A, 000h, T1
    CMPEQ?BCB	_B, 000h, T2
    LAND?BBW	T1, T2, T2
    CMPEQ?BCB	_C, 000h, T3
    LAND?WBW	T2, T3, T3
    CMPF?WL	T3, L00003
    Dave
    Always wear safety glasses while programming.

  3. #3
    Join Date
    Sep 2004
    Location
    montreal, canada
    Posts
    6,898


    Did you find this post helpful? Yes | No

    Default

    You will have problem with the first one one day or another (put some values in and figure a roll-over), but the second one is bullet proof.

    If you want to measure it, you may use the regular suggestions
    1. Set a pin before, and clear it after the IF-THEN or code block. Measure the delay with a scope or frequency meter
    2. Same as above, but use an internal Timer and output the data over serail port
    3. Use MPLAB stopwatch

    http://www.picbasic.co.uk/forum/show...33&postcount=9 <-- really handy
    http://www.picbasic.co.uk/forum/show...9&postcount=13
    Steve

    It's not a bug, it's a random feature.
    There's no problem, only learning opportunities.

  4. #4
    Join Date
    May 2004
    Location
    NW France
    Posts
    3,615


    Did you find this post helpful? Yes | No

    Wink

    Quote Originally Posted by RussMartin View Post
    Which of these is faster to execute?

    IF A+B+C=0 THEN . . .

    or

    IF A=0 AND B=0 AND C=0 THEN . . .

    Hi, RUSS

    A+B+C = 0 has many solutions AS ... you use an ADDITION and not a Bitwise AND !!!

    253 + 2 + 1 = 0 .... for Bytes !!!
    1 + 1 + 0 = 0 ... for Bits !!!

    so, It can't be equivalent to the second line ... Too Bad !


    Now, let's suppose A, B, C are BITs ...



    so

    Code:
    IF  A | B | C  THEN Z = 1...
    Will be the fastest ... with PBP.`( 17 asm Lines ...)

    Code:
    IF  (NOT A & NOT B & NOT C ) THEN Z = 1
    is somewhat longer ...

    BUT, if A,B,C are inputs ... would be faster to mask the other inputs and test if result is 0

    Code:
    IF ( PORTx & %00000111 ) THEN Z = 1
    Only 12 asm lines ...

    Alain
    Last edited by Acetronics2; - 15th February 2009 at 19:46.
    ************************************************** ***********************
    Why insist on using 32 Bits when you're not even able to deal with the first 8 ones ??? ehhhhhh ...
    ************************************************** ***********************
    IF there is the word "Problem" in your question ...
    certainly the answer is " RTFM " or " RTFDataSheet " !!!
    *****************************************

  5. #5
    Join Date
    Aug 2006
    Location
    Omaha, Nebraska USA
    Posts
    263


    Did you find this post helpful? Yes | No

    Default

    Thanks to each and all of you. I appreciate especially the warnings about pitfalls in the summation test; I'll remember those.

    I failed to provide the limits/boundary conditions. I should have qualified the question and put it this way:

    Which of these is faster to execute?

    For A, B, C < 2 (and of course not negative!),

    IF A+B+C=0 THEN . . .

    or

    IF A=0 AND B=0 AND C=0 THEN . . .


    It looks as if Dave assumed the limits I had in mind.

    The reason for my question was that, back in the bad old days, the syntax of conditional statements in FORTRAN IIb (sometimes called "Weather Bureau FORTRAN") was extremely limited, so doing a test like this was easier, if not necessarily faster.

    I happened to try it with PBP in an application, and it worked. I just didn't know how economical it was in terms of generated code. Hence my question.
    Last edited by RussMartin; - 15th February 2009 at 19:30.
    Russ
    N0EVC, xWB6ONT, xWN6ONT

    "Easy to use" is easy to say.

Similar Threads

  1. conditional defines in PBP?
    By rdxbam in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 13th March 2010, 14:40
  2. Replies: 5
    Last Post: - 28th May 2008, 10:20
  3. interrupt handling faster than if's?
    By mbw123 in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 27th October 2006, 01:25
  4. OT - Firefox browser - faster performance
    By malc-c in forum Off Topic
    Replies: 2
    Last Post: - 14th August 2006, 10:33
  5. Conditional Compilation
    By milestag in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 3rd March 2006, 20:29

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts