<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[fabs() wirkt antiquiert]]></title><description><![CDATA[<p>Hallöle<br />
Gibt es nicht ein Template die diese Funktion übernimmt? fabs/abs ist äussert nutzlos wenn kein double/int erwünscht ist!<br />
Klar geht das in 2sek selbst, aber ist da nicht was im standard? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244433/fabs-wirkt-antiquiert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 10:49:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244433.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Jun 2009 09:07:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 09:07:04 GMT]]></title><description><![CDATA[<p>Hallöle<br />
Gibt es nicht ein Template die diese Funktion übernimmt? fabs/abs ist äussert nutzlos wenn kein double/int erwünscht ist!<br />
Klar geht das in 2sek selbst, aber ist da nicht was im standard? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734933</guid><dc:creator><![CDATA[absolutist]]></dc:creator><pubDate>Tue, 30 Jun 2009 09:07:04 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 09:11:21 GMT]]></title><description><![CDATA[<p>absolutist schrieb:</p>
<blockquote>
<p>Hallöle<br />
Gibt es nicht ein Template die diese Funktion übernimmt? fabs/abs ist äussert nutzlos wenn kein double/int erwünscht ist!<br />
Klar geht das in 2sek selbst, aber ist da nicht was im standard? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>also wenn es ein template gäbe oder ein paar überladungen, würden sie abs heißen.<br />
vielleicht haste ja glück und abs klappt auch für fließkommatypen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734937</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 30 Jun 2009 09:11:21 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 10:24:40 GMT]]></title><description><![CDATA[<blockquote>
<p>double fabs(double x);<br />
float fabsf(float x);<br />
long double fabsl(long double x);</p>
</blockquote>
<blockquote>
<p>int abs(int j);<br />
long int labs(long int j);<br />
long long int llabs(long long int j);</p>
</blockquote>
<p>Wo ist das Problem, was ist daran antiquiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734963</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 30 Jun 2009 10:24:40 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 10:28:06 GMT]]></title><description><![CDATA[<p>Weil templates einfach praktischer wären.<br />
zB für die Verwendung<br />
- innerhalb von templates<br />
- mit eigenen Datentypen</p>
<p>Es gibt doch keinen Grund haufenweise Überladunegn zu basteln!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734965</guid><dc:creator><![CDATA[absolutist]]></dc:creator><pubDate>Tue, 30 Jun 2009 10:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 10:48:54 GMT]]></title><description><![CDATA[<p>Diese sind Teil der C-Bibliothek, es sind auch keine Ueberladungen.</p>
<blockquote>
<p>Weil templates einfach praktischer wären.</p>
</blockquote>
<p>Subjektiv.</p>
<p>Dann bastele dir doch schnell selbst ein Template:</p>
<pre><code class="language-cpp">template &lt;class T&gt; T abs( const T&amp; a ) { return (a&lt;0)?-1*a:a; }
</code></pre>
<p>Warum sollte denn jeder Scheiss mit im Standard sein, den man als Einzeiler hinschreiben kann ... Auch gibt es Probleme bei der Allgemeingueltigkeit: Was ist 0 fuer einen Typ T, was bedeutet &lt; fuer einen Typ T, was bedeutet -1 bei einem Typ T, was bedeutet * bei einem Typ T? Auch ist im Allgemeinen unklar, was absolut fuer eine Bedeutung hat, bei Punkten im Raum ist es wohl anders als bei reellen Zahlen (hinzu kommt dann noch welche Halbmetrik/Metrik/Norm zu verwenden ist). Da sind die typbezogenen Funktionen der C-Bibliothek schon besser.</p>
<blockquote>
<p>Es gibt doch keinen Grund haufenweise Überladunegn zu basteln!</p>
</blockquote>
<p>Wie du siehst, gibt es den.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734968</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 30 Jun 2009 10:48:54 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 10:50:52 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Warum sollte denn jeder Scheiss mit im Standard sein, den man als Einzeiler hinschreiben kann ...</p>
</blockquote>
<p>Weil es dann so viele Einzeiler-Implementationen wie Programmierer gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734969</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Tue, 30 Jun 2009 10:50:52 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 11:01:52 GMT]]></title><description><![CDATA[<p>absolutist schrieb:</p>
<blockquote>
<p>Hallöle<br />
Gibt es nicht ein Template die diese Funktion übernimmt? fabs/abs ist äussert nutzlos wenn kein double/int erwünscht ist!<br />
Klar geht das in 2sek selbst, aber ist da nicht was im standard?</p>
</blockquote>
<p>Ja, gibt es: In <code>&lt;cstdlib&gt;</code> gibt's <code>std::abs</code> für <code>int</code> und <code>long</code> . In <code>&lt;cmath&gt;</code> gibt's <code>std::abs</code> für <code>float</code> , <code>double</code> und <code>long double</code> . In &lt;complex&gt; gibt's <code>std::abs</code> für <code>complex&lt;T&gt;</code> mit einem <code>T</code> als Rückgabewert.</p>
<p>Tipp für generischen Code: Schreibe statt</p>
<pre><code class="language-cpp">T foo = std::abs(bar);
</code></pre>
<p>lieber</p>
<pre><code class="language-cpp">using std::abs;
  T foo = abs(bar);
</code></pre>
<p>innerhalb einer Funktion. Die zweite Version funktioniert dann nicht nur mit den eingebauten Typen, sondern auch noch -- dank <a href="http://en.wikipedia.org/wiki/Argument_dependent_name_lookup" rel="nofollow">ADL</a> -- mit benutzerdefinierten Typen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734973</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 30 Jun 2009 11:01:52 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 11:25:59 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a>: Stell dir vor, ein bisschen muss man beim programmieren schon selber denken. Dein &quot;Argument&quot; könnte man auf jedes template anwenden! :p</p>
<p>@Pizer:<br />
Hört sich gut an, jedoch verstehe ich nicht ganz warum das auch mit benutzerdefinierten Typen geht wenn es doch nur Funktionen für die von dir aufgezählten Typen gibt!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734984</guid><dc:creator><![CDATA[absolutist]]></dc:creator><pubDate>Tue, 30 Jun 2009 11:25:59 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 11:44:40 GMT]]></title><description><![CDATA[<p>absolutist schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a>: Stell dir vor, ein bisschen muss man beim programmieren schon selber denken. Dein &quot;Argument&quot; könnte man auf jedes template anwenden! :p</p>
</blockquote>
<p>Nein, * und &lt; koennen als Operatoren der Klasse implementiert sein und erhalten somit Semantik, aber fuer 0 und 1 bzw. -1 gibt es keinen schoenen allgemeinen Weg. Einfachstes Beispiel ist das Template max. Dort wuerde meine Argumentation fehlschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734995</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 30 Jun 2009 11:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 11:57:19 GMT]]></title><description><![CDATA[<p>absolutist schrieb:</p>
<blockquote>
<p>@Pizer:<br />
Hört sich gut an, jedoch verstehe ich nicht ganz warum das auch mit benutzerdefinierten Typen geht wenn es doch nur Funktionen für die von dir aufgezählten Typen gibt!?</p>
</blockquote>
<p>Man muss natürlich eine passende <code>abs</code> -Funktion für den benutzerdefinierten Typen im selben Namensraum definieren, in der auch der Typ definiert ist:</p>
<pre><code class="language-cpp">class high_precision_float {
    //...
  };

  high_precision_float abs(high_precision_float const&amp; x)
  {
    //...
  }
</code></pre>
<p>Diese Funktion wird dann dank <a href="http://en.wikipedia.org/wiki/Argument_dependent_name_lookup" rel="nofollow">ADL</a> gefunden -- aber nur, wenn du nicht ADL explizit durch eine Qualifizierung (std::abs) umgehst.</p>
<p>Ich hatte dazu mal nen kleinen <a href="http://pizer.wordpress.com/2008/10/22/fun-with-c-namespaces-sarcasm/" rel="nofollow">Artikel</a> geschrieben. Vielleicht ist der ja brauchbar. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735000</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Tue, 30 Jun 2009 11:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 12:03:59 GMT]]></title><description><![CDATA[<blockquote>
<p>abs-Funktion für den benutzerdefinierten Typen im selben Namensraum definieren</p>
</blockquote>
<p>Wo wir wieder bei Ueberladung sind, das ja absolutist kritisiert hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735005</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 30 Jun 2009 12:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to fabs() wirkt antiquiert on Tue, 30 Jun 2009 12:31:38 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Nein, * und &lt; koennen als Operatoren der Klasse implementiert sein und erhalten somit Semantik, aber fuer 0 und 1 bzw. -1 gibt es keinen schoenen allgemeinen Weg. Einfachstes Beispiel ist das Template max. Dort wuerde meine Argumentation fehlschlagen.</p>
</blockquote>
<p>Das liegt aber hauptsächlich an deinem schlechten Funktionstemplate. Wenn man es nämlich ein wenig umschreibt, dann fallen so gut wie alle deine Punkte weg:</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
T abs(T const&amp; val)
{
  return (val &lt; T() ? -val : val);
}
</code></pre>
<p>Zudem, wie es bei allen Templates der Fall ist, wie auch bei allen Algorithmen aus der Standardbibliothek, muss der Typ T halt einem gewissen Konzept folgen. Aber mit der oben genannten Vorgehensweise dürfte man viele Möglichkeiten, abdecken. Man hat auch keine 0 und keine -1 mehr.</p>
<p>Für spezielle Typen, wie zum Beispiel einen Vektor, darf man eine Spezialisierung anbieten. Der Standard erlaubt ja nur, dass man Funktionen aus dem Namensraum <code>std</code> spezialisieren darf, aber nichts in diesem Namensraum dazufügen.<br />
Wobei man hier schlussendlich dann wohl auf das gleiche Problem wie mit <code>std::swap</code> stossen wird. Wodurch eine Überladung, bei welcher man auf ADL setzt, trotzdem benötigt wird. Aber immerhin nur bei gewissen Typen.<br />
Durch den einheitlichen Funktionsnamen hat man zudem einen standardisierten Funktionsnamen. Wodurch alle Funktionen hoffentlich so heissen werden. Weil in C die Überladung fehlt, fehlt dieser einheitliche Namen aktuell vollkommen.</p>
<p>Obwohl so ein Funktionstemplate auch ein paar Nachteile hat, sehe ich im allgemeinen allerdings mehr Vorteile gegenüber den aktuellen Möglichkeiten.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1735017</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1735017</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 30 Jun 2009 12:31:38 GMT</pubDate></item></channel></rss>