Unnecessary operation removed from map() in WMath.cpp (#6218)
* Unneccesary Operation Removed
(A) extra operation not needed and incorrect:
wrong by 0.5 but happens to be thrown out
( delta * dividend + (divisor / 2) ) / divisor
delta * dividend divisor
= ---------------- + -----------
divisor 2 * divisor
= delta * dividend / divisor + 1/2
(B) check first before doing other computations
(C) changed to rise/run, easier for future maintainer
since it's closer to equation of a line
(D) before: mult, shift, add, div, add
now: mult, div, add
(E) error message easier to trace where thrown
* Update WMath.cpp
forgot to change variable name
This commit is contained in:
parent
dafdc05249
commit
5be3ff74ea
1 changed files with 7 additions and 7 deletions
|
|
@ -67,14 +67,14 @@ long random(long howsmall, long howbig)
|
|||
}
|
||||
|
||||
long map(long x, long in_min, long in_max, long out_min, long out_max) {
|
||||
const long dividend = out_max - out_min;
|
||||
const long divisor = in_max - in_min;
|
||||
const long delta = x - in_min;
|
||||
if(divisor == 0){
|
||||
log_e("Invalid map input range, min == max");
|
||||
return -1; //AVR returns -1, SAM returns 0
|
||||
const long run = in_max - in_min;
|
||||
if(run == 0){
|
||||
log_e("map(): Invalid input range, min == max");
|
||||
return -1; // AVR returns -1, SAM returns 0
|
||||
}
|
||||
return (delta * dividend + (divisor / 2)) / divisor + out_min;
|
||||
const long rise = out_max - out_min;
|
||||
const long delta = x - in_min;
|
||||
return (delta * rise) / run + out_min;
|
||||
}
|
||||
|
||||
uint16_t makeWord(uint16_t w)
|
||||
|
|
|
|||
Loading…
Reference in a new issue