Dans la quête pour créer une fonction de génération de nombres déterministes, notre objectif est de construire une fonction où chaque nombre d'entrée génère un correspondant unique numéro sans aucun doublon.
Solution arithmétique modulaire :
La solution ingénieuse réside dans l'arithmétique modulaire, en particulier le chiffre Affine. Il utilise la formule de transformation :
f(P) = (mP + s) mod n
où :
Pour la plage uint64, une valeur non paire pour m est suggérée pour éviter la divisibilité par 2.
Exemple d'implémentation :
import ( "fmt" ) func main() { m := uint64(39293) s := uint64(75321908) transform := func(p uint64) uint64 { return p * m + s } testValues := []uint64{1, 2, 3, 4, 5} for _, v := range testValues { fmt.Printf("%v -> %v\n", v, transform(v)) } }
Cette fonction garantit que pour toutes les valeurs d'entrée uint64 possibles, les valeurs transformées générées sont uniques.
Adaptation pour les entiers signés :
Pour les entiers signés (int64), l'approche reste similaire. Nous convertissons les entrées et les sorties entre uint64 et int64 pour conserver des mappages uniques :
func signedTransform(p int64) int64 { return int64(transform(uint64(p))) }
En utilisant cette fonction déterministe, les développeurs peuvent générer des nombres uniques et reproductibles à partir de n'importe quel entier d'entrée donné, ce qui en fait un outil inestimable pour diverses applications. .
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!