Rumah >pembangunan bahagian belakang >Golang >Adakah Terdapat Cara Lebih Pantas untuk Semak sama ada big.Int ialah Zero?

Adakah Terdapat Cara Lebih Pantas untuk Semak sama ada big.Int ialah Zero?

Linda Hamilton
Linda Hamiltonasal
2024-11-29 04:38:15917semak imbas

Is There a Faster Way to Check if a big.Int is Zero?

Adakah terdapat cara yang lebih pantas untuk menguji jika besar.Int ialah 0?

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!

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