Détermination de l'inclusion d'une plage entière avec une efficacité améliorée
Déterminer si un entier se situe dans une plage spécifiée est crucial pour de nombreuses applications. Traditionnellement, l'approche consiste à comparer l'entier aux limites de plage à l'aide d'opérateurs logiques (par exemple, >= et <=). Cependant, une technique optimisée a émergé, tirant parti de la conversion d'entiers non signés et d'une comparaison unique.
Considérez l'extrait de code :
if ((unsigned)(number - lower) < (upper - lower)) in_range(number);
Ici, le nombre entier est converti en un type non signé à l'aide de l'option Casting (non signé). Cette conversion inverse le bit de signe si le nombre est négatif, traduisant essentiellement la ligne entière à l'origine de la droite numérique.
Le terme (supérieur - inférieur) représente la différence de plage. Lorsqu'elle est calculée en dehors des boucles, elle devient une valeur constante, optimisant encore davantage la vitesse d'exécution.
L'information clé réside dans la manière dont les entiers non signés sont traités. Les valeurs négatives, lorsqu'elles sont interprétées comme non signées, deviennent supérieures aux valeurs positives. Par conséquent, si (non signé)(nombre - inférieur) est évalué comme négatif, le nombre est inférieur au niveau inférieur. À l'inverse, s'il est évalué comme supérieur à (supérieur - inférieur), le nombre dépasse le supérieur.
Cette méthode offre plusieurs avantages par rapport à l'approche traditionnelle :
Dans des scénarios réels, cette optimisation peut générer des gains de performances significatifs, comme le démontre l'accélération observée dans le code mis à jour fourni. Le code amélioré restreint efficacement les pixels dans un cercle dans un carré, une opération courante dans les fonctions de flou de boîte.
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!