Greatly reduces error rate (half, or 0 zero errors, depends on in/out ranges) for round-trip mapping at the same performance. (#3655)
(Based on "improved_map" from ESP8266's Servo.cpp)
This commit is contained in:
parent
5999b7ba46
commit
ab23e8a656
@ -66,11 +66,11 @@ long random(long howsmall, long howbig)
|
|||||||
}
|
}
|
||||||
|
|
||||||
long map(long x, long in_min, long in_max, long out_min, long out_max) {
|
long map(long x, long in_min, long in_max, long out_min, long out_max) {
|
||||||
long divisor = (in_max - in_min);
|
const long dividend = out_max - out_min;
|
||||||
if(divisor == 0){
|
const long divisor = in_max - in_min;
|
||||||
return -1; //AVR returns -1, SAM returns 0
|
const long delta = x - in_min;
|
||||||
}
|
|
||||||
return (x - in_min) * (out_max - out_min) / divisor + out_min;
|
return (delta * dividend + (divisor / 2)) / divisor + out_min;
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int makeWord(unsigned int w)
|
unsigned int makeWord(unsigned int w)
|
||||||
|
Loading…
Reference in New Issue
Block a user