Calculs logarithmiques en C : implémentation d'Integer Log2
En C, il est nécessaire d'avoir une fonction integer log2() pour déterminer les niveaux en binaire arborescences. Cependant, des inquiétudes surgissent lorsque les éléments de bord approchent des valeurs de 2^n, ce qui peut entraîner des erreurs d'arrondi dans les calculs de journaux à virgule flottante.
Pour résoudre ce problème, une solution efficace consiste à utiliser l'instruction bsr sur les systèmes x86 ou x86 modernes. -64 plates-formes. Cette instruction renvoie la position du bit le plus élevé dans un entier non signé, qui est identique à log2().
Voici une fonction C ou C qui invoque bsr en utilisant l'ASM en ligne :
#includestatic inline uint32_t log2(const uint32_t x) { uint32_t y; asm ( "\tbsr %1, %0\n" : "=r"(y) : "r" (x) ); return y; }
En tirant parti de cette technique, vous pouvez obtenir des calculs précis de log2() entiers pour les opérations sur les arbres binaires, garantissant ainsi la précision nécessaire à une indexation et une détermination de niveau appropriées.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3