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 divisor = (in_max - in_min); | ||||
|     if(divisor == 0){ | ||||
|         return -1; //AVR returns -1, SAM returns 0
 | ||||
|     } | ||||
|     return (x - in_min) * (out_max - out_min) / divisor + out_min; | ||||
|     const long dividend = out_max - out_min; | ||||
|     const long divisor = in_max - in_min; | ||||
|     const long delta = x - in_min; | ||||
| 
 | ||||
|     return (delta * dividend + (divisor / 2)) / divisor + out_min; | ||||
| } | ||||
| 
 | ||||
| unsigned int makeWord(unsigned int w) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user