Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengira Log2 Integer dengan Cekap dalam C Tanpa Ralat Titik Terapung?

Bagaimana untuk Mengira Log2 Integer dengan Cekap dalam C Tanpa Ralat Titik Terapung?

Susan Sarandon
Susan Sarandonasal
2024-11-22 10:23:10785semak imbas

How to Efficiently Calculate Integer Log2 in C   Without Floating-Point Errors?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn