From 458fba2180cb9c811bcd5cc02dfbeb235ca62bfa Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 16 Mar 2015 14:54:07 +0100 Subject: [PATCH] (Math) Improved code and added comments Former-commit-id: 3cf198715ac83e3d85d572d4ed0a3c6988074d0d --- include/Nazara/Math/Algorithm.inl | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/include/Nazara/Math/Algorithm.inl b/include/Nazara/Math/Algorithm.inl index 18b93c9cc..394d6a407 100644 --- a/include/Nazara/Math/Algorithm.inl +++ b/include/Nazara/Math/Algorithm.inl @@ -48,10 +48,16 @@ namespace { static_assert(sizeof(T) % sizeof(nzUInt32) == 0, "Assertion failed"); + // L'algorithme pour le logarithme base 2 (au dessus) ne fonctionne qu'avec des nombres au plus 32bits + // ce code décompose les nombres plus grands en nombres 32 bits par masquage et bit shifting for (int i = sizeof(T)-sizeof(nzUInt32); i >= 0; i -= sizeof(nzUInt32)) { + // Le masque 32 bits sur la partie du nombre qu'on traite actuellement T mask = T(std::numeric_limits::max()) << i*8; - unsigned int log2 = NzImplIntegralLog2((number & mask) >> i*8); + T val = (number & mask) >> i*8; // Masquage et shifting des bits vers la droite (pour le ramener sur 32bits) + + // Appel de la fonction avec le nombre 32bits, si le résultat est non-nul nous avons la réponse + unsigned int log2 = NzImplIntegralLog2(val); if (log2) return log2 + i*8; } @@ -72,10 +78,16 @@ namespace { static_assert(sizeof(T) % sizeof(nzUInt32) == 0, "Assertion failed"); + // L'algorithme pour le logarithme base 2 (au dessus) ne fonctionne qu'avec des nombres au plus 32bits + // ce code décompose les nombres plus grands en nombres 32 bits par masquage et bit shifting for (int i = sizeof(T)-sizeof(nzUInt32); i >= 0; i -= sizeof(nzUInt32)) { + // Le masque 32 bits sur la partie du nombre qu'on traite actuellement T mask = T(std::numeric_limits::max()) << i*8; - unsigned int log2 = NzImplIntegralLog2Pot((number & mask) >> i*8); + T val = (number & mask) >> i*8; // Masquage et shifting des bits vers la droite (pour le ramener sur 32bits) + + // Appel de la fonction avec le nombre 32bits, si le résultat est non-nul nous avons la réponse + unsigned int log2 = NzImplIntegralLog2Pot(val); if (log2) return log2 + i*8; }