Maison >développement back-end >Golang >Comment puis-je vérifier efficacement si un big.Int est 0 ou 1 en Go ?

Comment puis-je vérifier efficacement si un big.Int est 0 ou 1 en Go ?

DDD
DDDoriginal
2024-11-26 03:38:09760parcourir

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

Test de 0 dans un big.Int

Lorsque vous travaillez avec big.Ints, il y a des moments où vous devez tester une valeur de 0. La méthode standard car cela consiste à comparer le big.Int avec zéro en utilisant Cmp(zero) == 0. Cependant, cela peut être une opération lente, surtout si vous recherchez un moyen rapide et efficace de tester pour 0.

Heureusement, il existe des méthodes plus rapides. Une solution consiste à utiliser la fonction Int.Bits(), qui renvoie une tranche d'octets représentant les octets bruts de la représentation de big.Int. Dans le cas de 0, la tranche sera vide. En vérifiant la longueur de la tranche, vous pouvez rapidement déterminer si le big.Int est 0.

import "math/big"

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

Vous pouvez également utiliser la fonction Int.BitLen(), qui renvoie la longueur en bits du big. .Int. Pour 0, la longueur en bits sera de 0.

import "math/big"

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

Ces méthodes sont nettement plus rapides que de comparer le big.Int avec zéro en utilisant Cmp(). Les benchmarks montrent qu'ils sont plus de 20 fois plus rapides dans le cas de tests pour 0 et 10 fois plus rapides pour tester pour 1.

Tests pour 1 dans un big.Int

En utilisant une approche similaire, vous pouvez également créer une fonction pour tester une valeur de 1 dans un big.Int. Cette fonction vérifierait si la tranche renvoyée par Int.Bits() a une longueur de 1 et si le seul élément est 1. De plus, elle vérifierait que le signe de big.Int est positif.

import "math/big"

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

Cette méthode est également beaucoup plus rapide que de comparer le big.Int avec un big.Int représentant 1 en utilisant Cmp(). Les benchmarks montrent qu'il est plus de 10 fois plus rapide.

En utilisant ces méthodes plus rapides pour tester si un big.Int est 0 ou 1, vous pouvez améliorer considérablement les performances de votre code.

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