Vorzeichen einer Variable ändern



  • float var(var > 0.0 ? -var : var);
    

    Für negative Werte und äquivalent für positive Zahlen ... was willst de da ne große Funktion von machen? 😛

    inline float negate(float const& data){ return (data > 0.0f ? -data : data); }
    


  • Schreib dir lieber zwei Funktionen die deutlich machen was die ganze Aktion überhaupt soll:

    template <typename T> inline T make_pos( T const& t ) { return t < 0 ? -t : t; }
    template <typename T> inline T make_neg( T const& t ) { return t < 0 ? t : -t; }
    


  • (D)Evil schrieb:

    was willst de da ne große Funktion von machen? 😛

    Warum um Himmels willen sollte man keine Funktion draus machen? Die Funktion hat nahezu nur Vorteile.



  • Ich bezweifle, dass make_neg irgendeinen Vorteil gegenüber -abs hat.



  • y=-sqrt(pow(x,2));
    

    🙄



  • Bashar schrieb:

    Ich bezweifle, dass make_neg irgendeinen Vorteil gegenüber -abs hat.

    Es liest sich wesentlich deutlicher als -std::abs .

    Darüber hinaus, auch wenn man diese Anwendungsfälle aus dem OP höchstens erahnen kann: man kann bestehende Datenmengen wesentlich simpler via std::transform bearbeiten, und statt if else einen Funktionszeiger als Input bzw. Outputfilter verwenden.



  • Jo ... :xmas2: Performance pur!!!



  • finix schrieb:

    Bashar schrieb:

    Ich bezweifle, dass make_neg irgendeinen Vorteil gegenüber -abs hat.

    Es liest sich wesentlich deutlicher als -std::abs .

    Ja klar, irgendwelche privaten Hilfsfunktionen sind besser lesbar als Standardfunktionen.



  • Bashar schrieb:

    Ja klar, irgendwelche privaten Hilfsfunktionen sind besser lesbar als Standardfunktionen.

    Ich meinte zwar ursprünglich vor allem (D)Evil, aber, ja: eine prägnant benannte, private Hilfsfunktion lässt sich leichter lesen als ein equivalenter Ausdruck der nur Standardfunktionen enhält.

    Wenn dieser Ausdruck wirklich nur an einer einzigen Stelle im Programm vorkommt, dann würde ich wohl auch zu deiner Variante greifen, auch wenn ich hier tendenziell dem ternären Operator den Vorzug gäbe; andernfalls stelle ich mir ganz klar die Funktionen zur Verfügung.



  • finix schrieb:

    Bashar schrieb:

    Ja klar, irgendwelche privaten Hilfsfunktionen sind besser lesbar als Standardfunktionen.

    Ich meinte zwar ursprünglich vor allem (D)Evil, aber, ja: eine prägnant benannte, private Hilfsfunktion lässt sich leichter lesen als ein equivalenter Ausdruck der nur Standardfunktionen enhält.

    Wenn dieser Ausdruck wirklich nur an einer einzigen Stelle im Programm vorkommt, dann würde ich wohl auch zu deiner Variante greifen, auch wenn ich hier tendenziell dem ternären Operator den Vorzug gäbe; andernfalls stelle ich mir ganz klar die Funktionen zur Verfügung.

    (rant on)
    Also was ist einfacher zu lesen & verstehen, -std::abs(v) oder (v > 0 ? -v : v) ? Hmmm...
    Und was ist hier einfacher: std::standard_funktion(v) oder selbstbenannte_funktion_mit_komischem_namen_der_finix_logisch_vorkommt_aber_nix_aussagt(v) ? Hmmm.

    Nur weil du denkst dass "make_neg" eine "prägnant benannte, private Hilfsfunktion" ist heisst das noch lange nicht dass andere das auch denken, und auf den ersten Blick verstehen was "make_neg" heissen soll.
    Ich kenne Code der von Leuten geschrieben wurde die (vermute ich mal) ähnlich denken wie du, und ich hasse es solchen Code zu lesen.

    Nenn die Funktion wenigstens "negative_absolute_value" oder sowas, wenn du schon umbedingt eine (IMO sinnfreie) private template Hilfsfunktion verwenden willst. Und implementiere sie bitte über -std::abs(v) , kein Grund kryptisch zu werden für sowas einfaches.
    (rant off)



  • Hallo,
    es gibt eine Standardfunktion für minus, operator-, schreibt man meist schlicht -. Es gibt eine Standardfunktion für den Absolutwert std::abs. Damit erscheint mir -std::abs eigentlich eine recht gute Bezeichnung zu sein. Und wenn mir das tatsächlich zu kompliziert wäre, dann würde ich mich wohl an den Namen der Standardfunktionen orientieren und neg_abs oder ähnliches verwenden.



  • hustbaer schrieb:

    (rant on)

    Auf sowas muss ich glaube ich nicht unbedingt antworten 🙄



  • HumeSikkins schrieb:

    Hallo,
    es gibt eine Standardfunktion für minus, operator-, schreibt man meist schlicht -. Es gibt eine Standardfunktion für den Absolutwert std::abs. Damit erscheint mir -std::abs eigentlich eine recht gute Bezeichnung zu sein.

    Das ist für sich allein gestellt sicher richtig.

    Allerdings ist -std::abs keine Bezeichnung sondern ein Ausdruck. Er ist keineswegs lesbarer als neg_abs und lässt sich nicht speichern.


Anmelden zum Antworten