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

Susan Sarandon
Lepaskan: 2024-11-22 10:23:10
asal
719 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan