From: Jim Brain (brain_at_jbrain.com)
Date: 2004-12-09 21:19:02
>> ... Then, the counter value is subtracted from the last
>> captured counter value. The result is made positive, and it is checked
>> for sanity. Assuming the number is < 7000, it is checked for equality
>> with 4096. ...
>
> Is that sign-inversion necessary? If the code to subtract the old counter
> value from the new one is less efficient, then can't you use the negative
> difference directly? (If it's greater than -7000, then, compare it
> to -4096.)
Dunno, let me see
void calc (unsigned int old, unsigned int new) {
unsigned int tmp;
if(new < old) {
tmp=old-new;
} else {
tmp=new-old;
}
if(tmp < 7000) {
...
}
}
Is the old code...
void calc (unsigned int old, unsigned int new) {
int tmp;
tmp=new-old;
if(tmp > -7000 && tmp < 7000) {
...
}
}
The corner case is when the counter is at 65535 (for example), and it
wraps, to 4095.
4095-65535 = -61440 -> (signed int) -4095 (I think...)
It would seem to work, and it'd be a bit faster, but someone needs to
check my math. I think the intermediate result would be stuffed into 16
bits, and that would normalize to -4095, but someone needs to verify.
Jim
--
Jim Brain
brain@jbrain.com
Message was sent through the cbm-hackers mailing list
Archive generated by hypermail pre-2.1.8.