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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.