7 -> 1
0 -> 0
-7 -> -1
Ich habe habe Code zu normalisieren:Wie Integer-Variable positiv negativ oder Null-Bit-Operationen
(x == 0 ? 0 : x/abs(x)) + 1
aber ist es möglich, Teilung zu vermeiden und es schneller machen?
7 -> 1
0 -> 0
-7 -> -1
Ich habe habe Code zu normalisieren:Wie Integer-Variable positiv negativ oder Null-Bit-Operationen
(x == 0 ? 0 : x/abs(x)) + 1
aber ist es möglich, Teilung zu vermeiden und es schneller machen?
Die Idee war, Bit-Operationen zu verwenden Verzweigungscode oder Wertumwandlung zu vermeiden. Haben Sie nicht gefunden, wie es mit Bit-Operationen zu tun, aber Apple diese Funktion bereits
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.
so einfach) Roh-Test zeigt ~ x100 schnellere Implementierung hinzufügen
Wie wäre es
(x == 0 ? 0 : (x < 0 ? -1 : 1))
Kleiner Nitpick: Es ist viel wahrscheinlicher, dass ein Wert ungleich Null ist (natürlich hängt das vom Datensatz ab). Wenn also die Leistung entscheidend ist, könnten Sie '0
'abs',' division' und "Addition" auf Ganzzahlen sind native Prozessoranweisungen. Sie sind sehr wahrscheinlich viel schneller als jede Art von Verzweigungscode. Sie müssen vergleichen und vergleichen – Alexander
Erste Tests haben gezeigt, dass die mehrstufige if else-Anweisung ungefähr 4 mal schneller funktioniert ... –
Verwenden Sie den unsicheren Divisionsoperator und den unsicheren add-Operator. Das wird 2 Zweige entfernen – Alexander