Shop OBEX P1 Docs P2 Docs Learn Events
routine speed question — Parallax Forums

routine speed question

ArchiverArchiver Posts: 46,084
edited 2001-07-21 19:39 in General Discussion
Mohamed-

Your routine must decide to not do several things before it goes to
the decrement routine, so that will take longer than the other two
possibilities.

One way to speed things up is to move your least likely case (the
match or near match) to the bottom of your series of IFs. Better
yet, if speed is crucial, minimize the IFs and GOTOs:

loop:
if in0 = 0 then keypad
dispVal = ADdata**weighFactor + ADdata
gosub Maxdisplay
weighFactor = constant / dispVal + weighFactor
weighFactor = weighFactor - ( dispVal / constant )
if dispVal > (constant+1) OR dispVal < (constant-1) then loop
dispVal = weighFactor
goto writedata

This technique will increment or decrement weighFactor based on the
results of integer division. Ought to speed things up a lot.

Regards,

Steve

Comments

  • ArchiverArchiver Posts: 46,084
    edited 2001-07-20 16:37
    Hello,
    The following subroutine is to adjust the 'weighFactor' to get desired value
    equal to a 'constant'.
    The question is why the speed of the routine is fast with large numbers for
    'constant'(e.g 30000)and very slow for small numbers like 500 ?


    loop
    if in0 = 0 then keypad
    dispVal = ADdata**weighFactor + ADdata
    gosub Maxdisplay
    if dispVal < constant then increment 'reading is less than
    'desired value.
    if dispVal <= (constant+1) AND dispVal >= (constant-1) then done
    'reading is around desired value.
    if dispVal > constant then decrement 'reading is more than desired
    'value.

    increment
    weighFactor = weighFactor + 1
    goto loop
    decrement
    weighFactor = weighFactor - 1
    goto loop
    done
    dispVal = weighFactor
    goto writedata

    Thank You
    Mohamed Refky

    _________________________________________________________________
    Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
  • ArchiverArchiver Posts: 46,084
    edited 2001-07-20 20:03
    Hi Mohamed,

    It looks to me like the algorithm will _never_ converge if
    constant>ADdata. Is that a possibility? The speed of convergence
    will depend on how the initial guess for weighfactor is to the
    correct final value.

    -- regards
    Tracy Allen
    electronically monitored ecosystems
    http://www.emesystems.com
    mailto:tracy@e...


    >Hello,
    >The following subroutine is to adjust the 'weighFactor' to get desired value
    >equal to a 'constant'.
    >The question is why the speed of the routine is fast with large numbers for
    >'constant'(e.g 30000)and very slow for small numbers like 500 ?
    >
    >
    >loop
    >if in0 = 0 then keypad
    >dispVal = ADdata**weighFactor + ADdata
    >gosub Maxdisplay
    >if dispVal < constant then increment 'reading is less than
    > 'desired value.
    >if dispVal <= (constant+1) AND dispVal >= (constant-1) then done
    > 'reading is around desired value.
    >if dispVal > constant then decrement 'reading is more than desired
    > 'value.
    >
    >increment
    > weighFactor = weighFactor + 1
    > goto loop
    >decrement
    > weighFactor = weighFactor - 1
    > goto loop
    >done
    > dispVal = weighFactor
    > goto writedata
    >
    >Thank You
    >Mohamed Refky
  • ArchiverArchiver Posts: 46,084
    edited 2001-07-21 06:39
    On 21 Jul 01 at 21:39, Mohamed REFKY wrote:

    > ...I tested your routine but there is no speed difference.It is
    > the same,very slow with small number for 'constant',faster as
    > 'constant' increases...

    Then I suspect there is a fundamental problem in the math technique,
    as Tracy suggested. Can you describe in functional terms what you
    mean for the algorithm to accomplish, typical values involved, etc.?


    Regards,

    Steve
  • ArchiverArchiver Posts: 46,084
    edited 2001-07-21 19:39
    Steve

    I tested your routine but there is no speed difference.It is the same,very
    slow with small number for 'constant',faster as 'constant' increases.


    >From: "S Parkis" <parkiss@e...>
    >Reply-To: parkiss@e...
    >To: "Mohamed REFKY" <refky@h...>, basicstamps@yahoogroups.com
    >Subject: Re: [noparse][[/noparse]basicstamps] routine speed question
    >Date: Fri, 20 Jul 2001 09:33:42 +0800
    >
    >Mohamed-
    >
    >Your routine must decide to not do several things before it goes to
    >the decrement routine, so that will take longer than the other two
    >possibilities.
    >
    >One way to speed things up is to move your least likely case (the
    >match or near match) to the bottom of your series of IFs. Better
    >yet, if speed is crucial, minimize the IFs and GOTOs:
    >
    >loop:
    >if in0 = 0 then keypad
    >dispVal = ADdata**weighFactor + ADdata
    >gosub Maxdisplay
    >weighFactor = constant / dispVal + weighFactor
    >weighFactor = weighFactor - ( dispVal / constant )
    >if dispVal > (constant+1) OR dispVal < (constant-1) then loop
    >dispVal = weighFactor
    >goto writedata
    >
    >This technique will increment or decrement weighFactor based on the
    >results of integer division. Ought to speed things up a lot.
    >
    >Regards,
    >
    >Steve


    _________________________________________________________________
    Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
Sign In or Register to comment.