diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c04ec22..d22b323d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ if (POLICY CMP0177) endif() project(PIP) set(PIP_MAJOR 5) -set(PIP_MINOR 7) +set(PIP_MINOR 8) set(PIP_REVISION 0) set(PIP_SUFFIX _beta) set(PIP_COMPANY SHS) diff --git a/libs/main/math/pimathbase.h b/libs/main/math/pimathbase.h index 79252451..9aeb126e 100644 --- a/libs/main/math/pimathbase.h +++ b/libs/main/math/pimathbase.h @@ -308,10 +308,12 @@ inline PIVector piAbs(const PIVector & v) { //! \~russian Нормализует угол к диапазону `[0; 360]` градусов на месте. template void normalizeAngleDeg360(T & a) { - while (a < 0.) - a += 360.; - while (a > 360.) - a -= 360.; + if (std::isnan(a) || std::isinf(a)) { + a = 0.; + return; + } + a -= std::floor(a / 360.) * 360.; + if (a < 0) a += 360; } //! \~english Returns an angle normalized to the `[0; 360]` degree range. @@ -327,10 +329,13 @@ double normalizedAngleDeg360(T a) { //! \~russian Нормализует угол к диапазону `[-180; 180]` градусов на месте. template void normalizeAngleDeg180(T & a) { - while (a < -180.) - a += 360.; - while (a > 180.) - a -= 360.; + if (std::isnan(a) || std::isinf(a)) { + a = 0.; + return; + } + a -= std::floor(a / 360.) * 360.; + if (a < -180) a += 360; + if (a >= 180) a -= 360; } //! \~english Returns an angle normalized to the `[-180; 180]` degree range.