Masalah:
Apabila bekerja dengan big.Int, selalunya perlu untuk menguji sama ada nilainya ialah 0. Semasa membandingkan besar.Int kepada besar.Int mewakili 0 (cth., sifar := big.NewInt(0)) berfungsi, adakah terdapat cara yang lebih cepat khusus untuk 0?
Penyelesaian:
Ya, terdapat dua cara untuk menguji 0 yang jauh lebih pantas daripada membandingkan dengan besar lain.Int:
1. Semak Panjang Slice Bits:
big.Int mendedahkan kaedah Bits(), yang mengembalikan sekeping bait yang mewakili perwakilan binari dalaman bagi nilai. Untuk 0, kepingan ini akan kosong (tiada). Oleh itu, anda boleh menyemak sama ada panjang kepingan bit ialah 0:
if len(i1.Bits()) == 0 { }
2. Semak Panjang Bit:
Kaedah BitLen() mengembalikan bilangan bit yang diperlukan untuk mewakili nilai. Untuk 0, panjang bit ialah 0. Oleh itu, anda juga boleh menggunakan ini:
if i1.BitLen() == 0 { }
Keputusan Penanda Aras:
Berbanding dengan pendekatan perbandingan tradisional, kedua-dua kaedah di atas memberikan peningkatan prestasi yang ketara:
BenchmarkCompare-8 76975251 13.3 ns/op BenchmarkBits-8 1000000000 0.656 ns/op BenchmarkBitLen-8 1000000000 1.11 ns/op
Ujian untuk 1
Walaupun tidak sepantas menguji 0, pendekatan serupa boleh digunakan untuk menguji sama ada besar.Int bersamaan dengan 1: semak sama ada kandungan bit mewakili 1 dan tandanya positif.
Atas ialah kandungan terperinci Adakah Terdapat Cara Lebih Pantas untuk Semak sama ada big.Int ialah Zero?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!