Pengiraan Log2 Integer dalam C
Memperluas soalan yang diberikan, yang mencari kaedah untuk melaksanakan operasi log2 integer dalam C tanpa menghadapi terapung -isu anggaran titik, kami menyelidiki penyelesaian. Pustaka standard C tidak menyediakan pelaksanaan integer log, merumitkan pengiraan tahap indeks dalam pepohon binari menggunakan log(indeks) / log(2).
Untuk menangani perkara ini, fungsi ASM sebaris disediakan menggunakan arahan bsr pada platform x86 atau x86-64. Arahan ini menyediakan kedudukan bit set tertinggi dalam integer tidak bertanda, yang bersamaan dengan log2(). Pelaksanaan menggunakan kefungsian ASM sebaris.
#include <stdint.h> static inline uint32_t log2(const uint32_t x) { uint32_t y; asm ( "\tbsr %1, %0\n" : "=r"(y) : "r" (x) ); return y; }
Dengan memanfaatkan kaedah ini, anda boleh menentukan dengan tepat tahap indeks dalam pepohon binari, walaupun untuk elemen tepi dengan nilai = 2^n.
Atas ialah kandungan terperinci Bagaimana untuk Mengira Log2 Integer dengan Cekap dalam C Tanpa Ralat Titik Terapung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!