Szybki znak liczby całkowitej w C
W C jest funkcja znaku:
int sign(int x)
{
if(x > 0) return 1;
if(x < 0) return -1;
return 0;
}
Niestety koszt porównania jest bardzo wysoki, więc muszę zmodyfikować funkcję, aby zmniejszyć liczbę porównań.
Próbowałem:
int sign(int x)
{
int result;
result = (-1)*(((unsigned int)x)>>31);
if (x > 0) return 1;
return result;
}
W tym przypadku otrzymuję tylko jedno porównanie.
Czy jest jakiś sposób na uniknięcie porównań?
EDYTOWAĆ możliwy duplikat nie daje odpowiedzi na pytanie, ponieważ wszystkie odpowiedzi to C ++, używają porównania (które powinienem unikać) lub nie zwracają-1
, +1
, 0
.