Maison >développement back-end >Golang >Existe-t-il un moyen plus rapide de vérifier si un big.Int est nul ?

Existe-t-il un moyen plus rapide de vérifier si un big.Int est nul ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-29 04:38:15936parcourir

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

Existe-t-il un moyen plus rapide de tester si un big.Int est égal à 0 ?

Problème :

Lorsque vous travaillez avec big.Ints, il est souvent nécessaire de tester si la valeur est 0. En comparant le big.Int à un big.Int représentant 0 (par exemple, zero := big.NewInt(0)) fonctionne, existe-t-il un moyen plus rapide spécifiquement pour 0 ?

Solution :

Oui, il existe deux façons pour tester 0 qui sont nettement plus rapides que de comparer à un autre big.Int :

1. Vérifiez la longueur de la tranche de bits :

big.Int expose la méthode Bits(), qui renvoie une tranche d'octets représentant la représentation binaire interne de la valeur. Pour 0, cette tranche sera vide (nul). Par conséquent, vous pouvez simplement vérifier si la longueur de la tranche de bits est de 0 :

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

2. Vérifiez la longueur en bits :

La méthode BitLen() renvoie le nombre de bits requis pour représenter la valeur. Pour 0, la longueur en bits est 0. Par conséquent, vous pouvez également utiliser ceci :

if i1.BitLen() == 0 {
}

Résultats de référence :

Par rapport à l'approche de comparaison traditionnelle, les deux les méthodes ci-dessus offrent des améliorations significatives des performances :

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

Test pour 1

Bien qu'elle ne soit pas aussi rapide que tester 0, une approche similaire peut être utilisée pour tester si un big.Int est égal à 1 : vérifiez si le contenu des bits représente 1 et le signe est positif.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn