That's a shame Jeremy, I was going to expose you to the world as border line genius.
That's a shame Jeremy, I was going to expose you to the world as border line genius.
Last edited by T.Jackson; - 19th June 2008 at 17:37.
One possible "improved" solution is as follows ...
That code will do exactly the same job as ...Code:Select Case b1 Case Is < 219 timerN = 3 timerAc = 120 timerBc = 60 Case Is < 243 timerN = 2 timerAc = 180 timerBc = 60 Case Is <= 255 timerN = 1 timerAc = 600 timerBc = 180 End Select
BUT, it'll probably compile to half the size, run twice as fast, be more readable, easier to comprehend and definitely far easier to maintain.Code:If (b1 <= 255 And b1 >= 243) Then timerN = 1 timerAc = 600 timerBc = 180 End If If (b1 <= 242 And b1 >= 219) Then timerN = 2 timerAc = 180 timerBc = 60 End If If (b1 <= 218 And b1 >= 193) Then timerN = 3 timerAc = 120 timerBc = 60 End If
Regards,
Trent Jackson
Last edited by T.Jackson; - 20th June 2008 at 17:44.
I might add also that the same thing is possible using IF's, select case is always more effcient though however.
Notice how we start with the smallest number first? Always start with the smallest value first and work downwards with the next biggest value.Code:for (int i = 0; i < 12; i++) { sample = tempArray[i]; if (sample < 0) rangeA++; else if (sample < 10) rangeB++; else if (sample < 20) rangeC++; else if (sample < 30) rangeD++; else rangeE++; }
Hope it helps
Trent Jackson
i'm new to picbasic.
i didn't know that the "select" statment is so faster and smaller than many "if then" compiled in picbasic [realy i did not look at the select statment... i've just used the first think i know in picbasic]. it was my mistake that i does't look at the beutiness of my code... even in functions where performance are not needed (like the selection of the time).
i've just share my code.
anyway, thank for suggestions.
any other suggestion will be apriciated.
p.s. is this code more faster? (no IF needed)
LOOKDOWN2 W0,>[255,242,218,192,166,144,124,105,80,59,49,40,0],B0
LOOKUP2 B0,[60,600,180,120,60,60,40,30,20,15,10,45,30],timerAc
LOOKUP2 B0,[60,180,60,60,60,30,40,30,20,15,10,15,15],timerBc
LOOKUP2 B0,[6,1,2,3,4,5,6,7,8,9,10,11,12],timerN
Last edited by hozone; - 20th June 2008 at 21:14.
At a guess I'm going to say much slower. LOOKUP / DOWN is a function, a group of operations, probably containing many IFs inside it. I think the protocol behind that function would be lengthy, well protected and complex.
I place no bets though, never implemented it.
Trent Jackson
The main reason "Select Case" is faster is because it allows you to structure your code. As with an IF statement there's still a "compare" operation being preformed, but it's usually far better optimized.
The biggest problem with your original code is that every IF will be executed, which consequently wastes time.
Say for example that b1 = 245, the first IF is tested, the result returns true because b1 is within range of (255 - 243), so the block of code associated with that IF is executed, timerN is set to 1 etc ...
Now here's the problem -- all subsequent IFs are executed even though b1 is clearly out of range and the result will always return false while ever b = 245.
Select Case can be configured in a way so that only one comparison is ever performed, only one block of code is ever executed.Code:If (b1 <= 255 And b1 >= 243) Then ' Comparison always performed timerN = 1 timerAc = 600 timerBc = 180 End If If (b1 <= 242 And b1 >= 219) Then ' Comparison always performed timerN = 2 timerAc = 180 timerBc = 60 End If
Trent Jackson
Bookmarks