Rumah >pembangunan bahagian belakang >C++ >Adakah Terdapat Cara Lebih Pantas untuk Memeriksa sama ada Integer Jatuh Dalam Julat Tertentu?

Adakah Terdapat Cara Lebih Pantas untuk Memeriksa sama ada Integer Jatuh Dalam Julat Tertentu?

Barbara Streisand
Barbara Streisandasal
2024-12-10 03:28:21961semak imbas

Is There a Faster Way to Check if an Integer Falls Within a Given Range?

Cara Terpantas untuk Menentukan sama ada Integer Adalah Antara Dua Integer (Inklusif)

Menentukan sama ada integer terletak di antara dua integer lain adalah perkara biasa operasi, dan pendekatan tradisional melibatkan penggunaan logik DAN dan ketaksamaan perbandingan:

x >= start && x <= end

Walau bagaimanapun, adakah terdapat alternatif yang lebih pantas?

Satu potensi pengoptimuman ialah menggunakan satu perbandingan/cawangan. Pendekatan ini berfungsi dengan menukar nombor dan sempadan bawah dan atas kepada integer tidak bertanda dan membandingkan perbezaannya:

if ((unsigned)(number-lower) <= (upper-lower))
    in_range(number);

Mengapa ini berfungsi? Jika nombor di bawah sempadan bawah, perbezaannya akan menjadi negatif. Jika nombor berada dalam julat, perbezaannya akan menjadi positif dan kurang daripada atau sama dengan perbezaan antara sempadan atas dan bawah.

Kaedah ini mempunyai beberapa kelebihan:

  • Dikurangkan Arahan cawangan (hanya satu perbandingan diperlukan).
  • Ramalan cawangan yang dipertingkatkan (cawangan yang sama diambil tanpa mengira kedudukan nombor berbanding dengan julat).
  • Prestasi yang dipertingkatkan melalui pra-pengiraan perbezaan antara sempadan atas dan bawah (meminimumkan sumbangan masa).

Dalam amalan, menterjemah nombor dan selang ke titik asal dan menguji jika nombor itu terletak dalam [0, D], di mana D = atas - bawah, menyediakan asas untuk algoritma yang cekap ini. Nombor negatif di bawah sempadan bawah diterjemahkan kepada nilai negatif, manakala nombor di atas sempadan atas diterjemahkan kepada nilai yang lebih besar daripada D.

Atas ialah kandungan terperinci Adakah Terdapat Cara Lebih Pantas untuk Memeriksa sama ada Integer Jatuh Dalam Julat Tertentu?. 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