From 1689f560d5ad563dde681e656119080ef22d7ca8 Mon Sep 17 00:00:00 2001 From: peri4 Date: Fri, 29 May 2026 17:40:09 +0300 Subject: [PATCH] version 5.8.0 very important performance fix for normalizeAngleDeg...() methods, now fixed-speed (no "while") MQTT client release --- CMakeLists.txt | 2 +- libs/main/math/pimathbase.h | 21 +++++++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) 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.