7 -> 1
0 -> 0
-7 -> -1
J'ai avoir le code:Comment normaliser la variable Integer à négative positive ou nulle avec des opérations de bits
(x == 0 ? 0 : x/abs(x)) + 1
mais est-il possible d'éviter la division et de le rendre plus rapide?
7 -> 1
0 -> 0
-7 -> -1
J'ai avoir le code:Comment normaliser la variable Integer à négative positive ou nulle avec des opérations de bits
(x == 0 ? 0 : x/abs(x)) + 1
mais est-il possible d'éviter la division et de le rendre plus rapide?
L'idée était d'utiliser des opérations de bits pour éviter le code de branchement ou la valeur de conversion. n'avez pas trouvé comment faire avec les opérations de bits, mais la pomme déjà ajouter cette fonction
https://developer.apple.com/documentation/swift/int/2886673-signum
signum()
Returns -1 if this value is negative and 1 if it’s positive; otherwise, 0.
si simple) Test brut montre ~ x100 plus rapidement mise en œuvre
Que diriez-vous
(x == 0 ? 0 : (x < 0 ? -1 : 1))
Nitpick mineur: il est beaucoup plus probable qu'une valeur est non nulle que zéro (bien sûr, cela dépend de l'ensemble de données). Donc, si la performance est cruciale, alors vous pouvez faire '0
'abs',' division' et 'addition' sur les entiers sont des instructions natives du processeur. Ils sont très susceptibles d'être beaucoup plus rapides que n'importe quel code de branchement. Vous devrez comparer et comparer – Alexander
Les premiers tests ont montré que l'instruction multiniveau if else fonctionne environ 4 fois plus vite ... –
Utilisez l'opérateur de division non sécurisé et l'opérateur d'ajout non sécurisé. Cela supprimera 2 branches – Alexander