Rumah >pembangunan bahagian belakang >Golang >Bagaimana Saya Boleh Semak dengan Cekap sama ada big.Int ialah 0 atau 1 dalam Go?

Bagaimana Saya Boleh Semak dengan Cekap sama ada big.Int ialah 0 atau 1 dalam Go?

DDD
DDDasal
2024-11-26 03:38:09760semak imbas

How Can I Efficiently Check if a big.Int is 0 or 1 in Go?

Menguji untuk 0 dalam besar.Int

Apabila bekerja dengan big.Ints, ada kalanya anda perlu menguji nilai 0. Kaedah standard untuk ini adalah untuk membandingkan besar.Int dengan sifar menggunakan Cmp(sifar) == 0. Walau bagaimanapun, ini boleh menjadi operasi yang perlahan, terutamanya jika anda mencari cara yang cepat dan cekap untuk menguji 0.

Nasib baik, terdapat kaedah yang lebih pantas. Satu cara ialah menggunakan fungsi Int.Bits(), yang mengembalikan sekeping bait yang mewakili bait mentah bagi perwakilan big.Int. Dalam kes 0, kepingan akan kosong. Dengan menyemak panjang hirisan, anda boleh dengan cepat menentukan sama ada besar.Int ialah 0.

import "math/big"

func isZero(i *big.Int) bool {
    return len(i.Bits()) == 0
}

Sebagai alternatif, anda boleh menggunakan fungsi Int.BitLen(), yang mengembalikan panjang bit besar .Int. Untuk 0, panjang bit ialah 0.

import "math/big"

func isZero(i *big.Int) bool {
    return i.BitLen() == 0
}

Kaedah ini jauh lebih pantas daripada membandingkan big.Int dengan sifar menggunakan Cmp(). Penanda aras menunjukkan bahawa mereka lebih 20 kali lebih pantas dalam kes ujian untuk 0 dan 10 kali lebih cepat untuk ujian untuk 1.

Ujian untuk 1 dalam besar.Int

Menggunakan pendekatan yang serupa, anda juga boleh mencipta fungsi untuk menguji nilai 1 dalam big.Int. Fungsi ini akan menyemak sama ada kepingan yang dikembalikan oleh Int.Bits() mempunyai panjang 1 dan satu-satunya elemen ialah 1. Selain itu, ia akan menyemak sama ada tanda besar.Int adalah positif.

import "math/big"

func isOne(i *big.Int) bool {
    bits := i.Bits()
    return len(bits) == 1 && bits[0] == 1 && i.Sign() > 0
}

Kaedah ini juga jauh lebih pantas daripada membandingkan besar.Int dengan besar.Int mewakili 1 menggunakan Cmp(). Penanda aras menunjukkan bahawa ia lebih 10 kali lebih pantas.

Dengan menggunakan kaedah yang lebih pantas ini untuk menguji sama ada besar.Int ialah 0 atau 1, anda boleh meningkatkan prestasi kod anda dengan ketara.

Atas ialah kandungan terperinci Bagaimana Saya Boleh Semak dengan Cekap sama ada big.Int ialah 0 atau 1 dalam Go?. 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