Kaynağa Gözat

Add comments to new map() implementation

main
PaulStoffregen 4 yıl önce
ebeveyn
işleme
f908f0b70d
1 değiştirilmiş dosya ile 7 ekleme ve 0 silme
  1. +7
    -0
      teensy4/wiring.h

+ 7
- 0
teensy4/wiring.h Dosyayı Görüntüle

@@ -60,16 +60,23 @@ long map(T _x, A _in_min, B _in_max, C _out_min, D _out_max, typename std::enabl
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
#endif
// first compute the ranges and check if input doesn't matter
long in_range = in_max - in_min;
long out_range = out_max - out_min;
if (in_range == 0) return out_min + out_range / 2;
// compute the numerator
long num = (x - in_min) * out_range;
// before dividing, add extra for proper round off (towards zero)
if (out_range >= 0) {
num += in_range / 2;
} else {
num -= in_range / 2;
}
// divide by input range and add output offset to complete map() compute
long result = num / in_range + out_min;
// fix "a strange behaviour with negative numbers" (see ArduinoCore-API issue #51)
// this step can be deleted if you don't care about non-linear output
// behavior extrapolating slightly beyond the mapped input & output range
if (out_range >= 0) {
if (in_range * num < 0) return result - 1;
} else {

Yükleniyor…
İptal
Kaydet