Rumah >pembangunan bahagian belakang >Golang >Adakah Terdapat Cara Lebih Pantas untuk Semak sama ada big.Int ialah Sifar Daripada Cmp(sifar)?

Adakah Terdapat Cara Lebih Pantas untuk Semak sama ada big.Int ialah Sifar Daripada Cmp(sifar)?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-26 06:38:13433semak imbas

Is There a Faster Way to Check if a big.Int is Zero Than Cmp(zero)?

Alternatif kepada Cmp(sifar) untuk Menguji jika besar.Int ialah 0

Apabila bekerja dengan big.Ints, menguji nilai 0 adalah tugas biasa. Semasa menggunakan Cmp(sifar) untuk membandingkan besar.Int kepada nilai sifar ialah pilihan yang berdaya maju, kaedah ini mungkin tidak selalunya yang paling cepat. Artikel ini meneroka kaedah alternatif yang boleh menawarkan prestasi yang lebih baik untuk senario khusus ini.

Mengakses Perwakilan Bait Mentah

besar.Int mendedahkan kaedah Int.Bits() untuk mengakses bait mentah perwakilannya. Potongan ini menyediakan akses terus kepada perwakilan dalaman integer, yang dikongsi dengan big.Int yang asal. Ini bermakna mengakses bit secara langsung ialah operasi berprestasi.

Ujian untuk 0

Seperti yang dinyatakan dalam dokumentasi, nilai sifar untuk besar.Int mewakili nilai 0. Oleh itu, kepingan yang sepadan akan kosong. Dengan menyemak panjang kepingan ini, kita boleh menentukan dengan cekap sama ada besar.Int ialah 0:

if len(i1.Bits()) == 0 {
    // i1 is 0
}

Sebagai alternatif, fungsi Int.BitLen() mengembalikan panjang bit bagi big.Int. Memandangkan panjang bit 0 juga ialah 0, kaedah ini boleh digunakan sama:

if i1.BitLen() == 0 {
    // i1 is 0
}

Keputusan Penanda Aras

Menanda aras prestasi kaedah yang dicadangkan menunjukkan peningkatan yang ketara melalui pendekatan Cmp(sifar) tradisional:

BenchmarkCompare-8      76975251            13.3 ns/op
BenchmarkBits-8         1000000000           0.656 ns/op
BenchmarkBitLen-8       1000000000           1.11 ns/op

Seperti yang terbukti, dapatkan bit dan membandingkan panjang kepingan hingga 0 adalah lebih kurang 20 kali lebih pantas daripada Cmp(sifar), manakala menggunakan Int.BitLen() adalah kira-kira 10 kali lebih pantas.

Kesimpulan

Dengan memanfaatkan kaedah Int.Bits() dan pelaksanaannya yang dikongsi dengan Int.BitLen(), kami boleh menguji dengan cekap jika big.Int ialah 0 tanpa mengorbankan prestasi. Alternatif ini menawarkan kelebihan kelajuan yang ketara untuk aplikasi yang memerlukan pemeriksaan 0 yang kerap bagi integer besar.

Atas ialah kandungan terperinci Adakah Terdapat Cara Lebih Pantas untuk Semak sama ada big.Int ialah Sifar Daripada Cmp(sifar)?. 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