copy_sign() für int?

Gast #4450203
Lesenswert?

Nicht dass es jetzt wirklich wichtig wäre, aber ich frage mich gerade, 
wie man für int die Funktion copy_sign() schreibt. Also jetzt eher auf 
dem PC. If soll man ja wohl eher vermeiden, wegen Branch Prediction oder 
so. Also eher die zweite Form? Für Float gibt es copy_sign ja 
vordefinert.
1
#include <stdlib.h>
2
int copy_sign(int a, int b)
3
{
4
  //return (b < 0 ? -abs(a) : abs(a));
5
  return abs(a) * (b/b);
6
}
Gast #4450419
Lesenswert?

Jay schrieb:
> int copy_sign(int v, int s)
> {
>   int candidates[] = { v, -v, -v, v };
>
>   return candidates[((s < 0) << 1) & (v < 0)];
> }

Ehm:
1
int copy_sign(int v, int s)
2
{
3
  int candidates[] = { v, -v, -v, v };
4

5
  return candidates[((s < 0) << 1) | (v < 0)];
6
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren