Maison >développement back-end >Golang >Comment puis-je vérifier efficacement si un big.Int est 0 ou 1 en Go ?
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.
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!