Für eine Firmware habe ich eine LUT implementiert, die std::lerp
benutzt.
Ich wurde jetzt jedoch überrascht, dass ein lookup mit NaN eine Zahl
ergab (also nicht NaN). Das macht gar keinen Sinn. Als compiler benutze
ich GCC9.
Stellt sich heraus, dass
1 | std::lerp(1, 2, nan) -> 2 mit GCC
|
2 | std::lerp(1, 2, nan) -> nan mit MSVC (daher fiel mir das auch nicht in unit tests auf)
|
siehe hier:
https://godbolt.org/z/Y6dKqqKP6
Link zu lerp: https://en.cppreference.com/w/cpp/numeric/lerp
Bonus: std::lerp() ist gemäß c++20 constexpr, aber GCC hat da
anscheinend einen bug und std::lerp() ist nicht constexpr wenn t==NaN.
Da std::lerp a + t*(b - a) implementieren soll, scheint die
Implementierung von GCC fehlerhaft zu sein.