<?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[((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt]]></title><description><![CDATA[<p>Hallo, ich möchte mir eine Fkt. schreiben, die 3 Integerwerte übergeben bekommt, und den kleinsten, der GROESSER -1 ist, zurückgibt.<br />
Gibt es da einen einfachen Weg?<br />
Den kleinsten zu finden ist ja nicht schwer, doch momentan habe ich bei dem Thema ein Brett vorm Kopf.<br />
Bin für jeden denkanstoß dankbar!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/274548/smallest-amp-amp-greater-than-1-fkt</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 10:26:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274548.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Sep 2010 09:56:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 09:56:56 GMT]]></title><description><![CDATA[<p>Hallo, ich möchte mir eine Fkt. schreiben, die 3 Integerwerte übergeben bekommt, und den kleinsten, der GROESSER -1 ist, zurückgibt.<br />
Gibt es da einen einfachen Weg?<br />
Den kleinsten zu finden ist ja nicht schwer, doch momentan habe ich bei dem Thema ein Brett vorm Kopf.<br />
Bin für jeden denkanstoß dankbar!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958408</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Tue, 28 Sep 2010 09:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:07:46 GMT]]></title><description><![CDATA[<p><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="😕"
    /> Wo ist das Problem? Hier mal ein Denkanstoß:</p>
<pre><code class="language-cpp">if ((a&lt;b) &amp;&amp; (a&lt;c) &amp;&amp; (a&gt;-1)) return a;
</code></pre>
<p>Den Rest überlasse ich dir.</p>
<p>Wenn einem dieser Ansatz zu übersichtlich ist, kann man auch noch versuchen die Anzahl der Vergleiche zu minimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958418</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:07:46 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:09:04 GMT]]></title><description><![CDATA[<p>sudo rm -rf schrieb:</p>
<blockquote>
<p>Hallo, ich möchte mir eine Fkt. schreiben, die 3 Integerwerte übergeben bekommt, und den kleinsten, der GROESSER -1 ist, zurückgibt.</p>
</blockquote>
<p>Was soll Fkt(-2, -3, -4) ergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958419</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:09:04 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:12:50 GMT]]></title><description><![CDATA[<p>ja, so weit war ich auch schon</p>
<pre><code>if ((a&lt;b) &amp;&amp; (a&lt;c) &amp;&amp; (a&gt;-1)) return a;

a=1
b=-1
c=-1
</code></pre>
<p>in dem fall hat a den kleinsten wert von den 3 ints, der größer -1 ist.<br />
dennoch wird nichts zurückgegeben...</p>
<p>standardmäßig soll -1 returnt werden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958420</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:12:50 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:18:56 GMT]]></title><description><![CDATA[<p>Du kannst alle Zahlen als</p>
<pre><code class="language-cpp">unsigned
</code></pre>
<p>interpretieren und diese normal sortieren. Im Zweierkomplement (auf dessen Vorhandensein du dich dabei verlassen musst) ist jede negative Zahl (in etwa) das komplement der positiven, damit es eindeutig bleibt sind das die einzigen Zahlen, bei denen das höchste Bit gesetzt ist. Aber ganz im Ernst, bei drei Zahlen kannst du dir auch einfach die Arbeit machen und den Kram ausschreiben:</p>
<pre><code class="language-cpp">int babäm (int a, int b, int c)
{
   if (a &lt; 0)
      if (b &lt; 0)
          if (c &lt; 0)
              return -1;
          else
              return c;
      else
          return std::min(b, c);
   else
       if (b &lt; 0)
           if (c &lt; 0)
               return a;
           else
               return std::min(a, c);
       else
           if (c &lt; 0)
               return std::min(a, b);
           else
               return std::min(std::min(a, b), c);
}
</code></pre>
<p>Mit uminterpretieren:</p>
<pre><code class="language-cpp">int babäääm (int a, int b, int c)
{
    unsigned&amp; a_ = *reinterpret_cast&lt;unsigned*&gt; (&amp;a);
    unsigned&amp; b_ = *reinterpret_cast&lt;unsigned*&gt; (&amp;b);
    unsigned&amp; c_ = *reinterpret_cast&lt;unsigned*&gt; (&amp;c);
    unsigned res = std::min(std::min(a_, b_), c_);
    if (res &gt; std::numeric_limits&lt;int&gt;::max())
        return -1;
    else
        return int(res);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1958425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958425</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:24:27 GMT]]></title><description><![CDATA[<p>Danke, die erste Lösung finde ich ziemlich unübersichtlich...<br />
deshalb habe ich ja auch nach etwas &quot;einfachem&quot; ==schreibfaul gefragt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958429</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:24:27 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:24:45 GMT]]></title><description><![CDATA[<p>Und jetzt baust du einfach noch eben diese Bedingung ein und schon bist du fertig. Noch ein Tipp:</p>
<pre><code class="language-cpp">if ((a&gt;-1) &amp;&amp; ((b&gt;-1) &amp;&amp; (a&lt;b)) &amp;&amp; ((c&gt;-1) &amp;&amp; (a&lt;c))) return a;
</code></pre>
<p>Hoffentlich habe ich mich nicht verklammert.</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Wenn ich so drüber nachdenke wäre es aber vermutlich einfacher alle Werte in einen Container sortieren und hinterher den kleinsten größer -1 zu nehmen. Das wären dann nämlich im schlimmsten Fall 3 Vergleiche zum sortieren, je nach Container eventuell noch bis zu drei Verschiebungen und danach schlimmstenfalls 3 Vergleiche mit -1 (im Falle, dass alle &lt;-1 sind). Das sind im Schnitt vermutlich deutlich weniger Operationen als mein erster Vorschlag, der, wenn ich ihn mir jetzt angucke, vielleicht doch nicht so sauber aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958430</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:31:39 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;algorithm&gt;

using namespace std;

int fkt(int a, int b, int c)
{
	int ret = -1;

	int res = min(min(a, b), c);

	return res &gt; ret ? res : ret;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1958436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958436</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:31:39 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:35:43 GMT]]></title><description><![CDATA[<p>Ich glaube, so etwas sollte auch gehen</p>
<pre><code class="language-cpp">int _1;
	int _2;
	int _3;
	// ...
	int min = max(max(max(-1,i),max(-1,j)),max(-1,k));
	if(min!=-1)
	{
	}
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958439</guid><dc:creator><![CDATA[ähhmja]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:36:35 GMT]]></title><description><![CDATA[<p>belli: genial!!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958440</guid><dc:creator><![CDATA[sudo rm -rf]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 10:41:37 GMT]]></title><description><![CDATA[<p>Oder aber etwas unübersichtlicher:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;

using namespace std;

int fkt(int a, int b, int c)
{
    return max(min(a, b), c), -1);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1958442</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958442</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 28 Sep 2010 10:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:00:03 GMT]]></title><description><![CDATA[<p>Die Funktion von Belli liefert aber nicht das gewünschte Ergebnis oder?</p>
<p>a = 1;<br />
b = -2;<br />
c = 5;</p>
<p>liefert -1 obwohl das Ergebis 1 sein sollte oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958454</guid><dc:creator><![CDATA[Fehler?!]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:00:03 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:30:24 GMT]]></title><description><![CDATA[<p>Jo, da hab ich wohl nur die Hälfte der Aufgabe gelesen/verstanden ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958462</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:30:24 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:31:00 GMT]]></title><description><![CDATA[<p>Die Variablennamen waren eben falsch, ansonsten</p>
<pre><code class="language-cpp">int fkt(int a, int b, int c)
{
	return max(max(max(-1,a),max(-1,b)),max(-1,c));
}
</code></pre>
<p>funktioniert das immer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958468</guid><dc:creator><![CDATA[ähmja]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:31:00 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:33:00 GMT]]></title><description><![CDATA[<p>ähmja schrieb:</p>
<blockquote>
<p>Die Variablennamen waren eben falsch, ansonsten</p>
<pre><code class="language-cpp">int fkt(int a, int b, int c)
{
	return max(max(max(-1,a),max(-1,b)),max(-1,c));
}
</code></pre>
<p>funktioniert das immer.</p>
</blockquote>
<p>Echt? Das sieht für mich aus als würde er einfach den größten Wert zurück liefern <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1958470</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958470</guid><dc:creator><![CDATA[Fehler?!]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:41:41 GMT]]></title><description><![CDATA[<p>Sorry, hab die Aufgabenstellung nur halb gelesen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958474</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958474</guid><dc:creator><![CDATA[ähmja]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:56:18 GMT]]></title><description><![CDATA[<p>Hier mal was anderes:</p>
<pre><code class="language-cpp">int temp[3]={a,b,c};
std::sort(temp, temp+3);
return * std::find_if(temp, temp+3, std::bind2nd(std::greater&lt;int&gt;(),-1))
</code></pre>
<p>Ungetestet auf Syntaxfehler, aber um mal zu zeigen was ich oben meinte.</p>
<p>Pro: Einfach erweiterbar auf N-Zahlen, leicht wartbar, leicht zu verstehen<br />
Contra: Overhead. Die Funktion wird immer noch sehr schnell sein, aber falls sie in einer zeitkritischen Schleife steht ist noch deutliche Optimierung möglich, indem man ausnutzt, dass es nur 3 Zahlen sind. sort und find sind nämlich ziemlicher Overkill um sie auf 3 Elemente anzuwenden. Eine sehr gute Implementierung von sort und ein optimierender Compiler mit Schleifenaufdröselung werden aber ein Ergebnis erzeugen, welches gleichwertig zu handgeschriebenem, optimierten Code ist. <strong>Es sollte daher also kein großer Nachteil sein.</strong> Eventuell ein eigenes, spezialisiertes sort für 3 Elemente schreiben.</p>
<p>edit: Ups, die Bedingung für find_if war genau falsch rum. Korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958476</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 11:51:41 GMT]]></title><description><![CDATA[<p>ähmja schrieb:</p>
<blockquote>
<p>Sorry, hab die Aufgabenstellung nur halb gelesen...</p>
</blockquote>
<p>Brauchst dich ja net zu entschuldigen <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="🙂"
    /> . Der Thread-Ersteller ist anscheinend mit den bekommenen Antworten zufrieden.</p>
<p>Und solange er net Software entwickelt die womöglich meine Gesundheit beeinträchtigt, soll es mir auch recht sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958480</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958480</guid><dc:creator><![CDATA[Fehler?!]]></dc:creator><pubDate>Tue, 28 Sep 2010 11:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 14:22:43 GMT]]></title><description><![CDATA[<p>Wieso nicht einfach</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;limits&gt;
using namespace std;

template&lt;typename T&gt;
T getsmallestmax(T a, T b, T c, T m)
{
	const T tmax = T(std::numeric_limits&lt;T&gt;::max);
	a=max(a,m)==m?tmax:a;
	b=max(b,m)==m?tmax:b;
	c=max(c,m)==m?tmax:c;
	return (a==b &amp;&amp; a==c)?m:min(min(a,b),c);
}

void f()
{
    getsmallestmax(1,2,3,-1);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1958565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958565</guid><dc:creator><![CDATA[Rumpelprogger]]></dc:creator><pubDate>Tue, 28 Sep 2010 14:22:43 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 15:03:59 GMT]]></title><description><![CDATA[<p>EDIT: Sorry, 2. Seite übersehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958595</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Tue, 28 Sep 2010 15:03:59 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 15:38:28 GMT]]></title><description><![CDATA[<p>Da nach 4.7 (2) negative ints nach unsigned umgewandelt modulo 2^(Breite unsigned) genommen werden und dementsprechend im Ergebnis größer als von int darstellbare Werte sind, ist Folgendes möglich:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;limits&gt;

int minmax(int x_p, int y_p, int z_p) {
  unsigned x = x_p,
           y = y_p,
           z = z_p;
  unsigned r = std::min(x, std::min(y, z));
  unsigned int_max = std::numeric_limits&lt;int&gt;::max();

  return r &lt;= int_max ? static_cast&lt;int&gt;(r) : -1;
}
</code></pre>
<p>Auf allen gängigen Rechnern ginge auch</p>
<pre><code class="language-cpp">int minmax(unsigned x, unsigned y, unsigned z) {
  return std::max(-1, static_cast&lt;int&gt;(std::min(x, std::min(y, z)));
}
</code></pre>
<p>...aber streng genommen ist die Umwandlung von unsigned nach int außerhalb des von int darstellbaren Wertebereichs <em>implementation-defined</em>, und man sollte sich nicht ohne Not undefiniertes Verhalten einfangen.</p>
<p>Der Vorteil des Ansatzes liegt darin, dass die Umwandlung von int nach unsigned in Zweierkomplementdarstellung rein konzeptuell ist und der größte Teil der Logik so auf allen gängigen Architekturen vom Compiler wegoptimiert werden kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958610</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Tue, 28 Sep 2010 15:38:28 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Tue, 28 Sep 2010 16:57:10 GMT]]></title><description><![CDATA[<p>.filmor schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int babäm (int a, int b, int c)
{
   if (a &lt; 0)
      if (b &lt; 0)
          if (c &lt; 0)
              return -1;
          else
              return c;
      else
          return std::min(b, c);
   else
       if (b &lt; 0)
           if (c &lt; 0)
               return a;
           else
               return std::min(a, c);
       else
           if (c &lt; 0)
               return std::min(a, b);
           else
               return std::min(std::min(a, b), c);
}
</code></pre>
<p>´</p>
</blockquote>
<p>Ich hab es jetzt mal so wie .filmor gemacht...<br />
sein code ist zwar nicht 100% korrekt aber es funzt, auch wenn es ganz und gar nicht schön aussieht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958641</guid><dc:creator><![CDATA[threadstarter]]></dc:creator><pubDate>Tue, 28 Sep 2010 16:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Wed, 29 Sep 2010 10:13:13 GMT]]></title><description><![CDATA[<p>@Rumpelprogger:</p>
<pre><code class="language-cpp">assert(greatestmax(1, 1, 1, -1) == 1);
</code></pre>
<p>@seldon:<br />
Das hab ich vorher schonmal geschrieben und zwar so, dass der Compiler nicht über Vorzeichenverlust warnt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>@threadstarter:</p>
<pre><code class="language-cpp">int babäm (int a, int b, int c)
{
   if (a &lt; 0)
      if (b &lt; 0)
          if (c &lt; 0)
              return -1;
          else
              return c;
      else
          if (c &lt; 0)
              return b;
          else
              return std::min(b, c);
   else
       if (b &lt; 0)
           if (c &lt; 0)
               return a;
           else
               return std::min(a, c);
       else
           if (c &lt; 0)
               return std::min(a, b);
           else
               return std::min(std::min(a, b), c);
}
</code></pre>
<p>sollte korrekt sein. Du kannst das ganze auch rekursiv mit variadic templates machen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958883</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Wed, 29 Sep 2010 10:13:13 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Wed, 29 Sep 2010 11:03:39 GMT]]></title><description><![CDATA[<p>Okay, in der letzten Zeile sollte</p>
<pre><code class="language-cpp">return (a==m &amp;&amp; a==b &amp;&amp; a==c)?m:min(min(a,b),c);
</code></pre>
<p>stehen. Der Nachteil ist auch, dass numeric_limits&lt;T&gt;::max für alle Werte ebenfalls min liefert. Der Vorteil allerdings ist, dass der Min-Wert frei wählbar ist.</p>
<pre><code class="language-cpp">getsmallestmax(4.4f,4.3f,4.5f,4.35f);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1958899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958899</guid><dc:creator><![CDATA[RumpelProgger]]></dc:creator><pubDate>Wed, 29 Sep 2010 11:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Wed, 29 Sep 2010 18:01:33 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Auf allen gängigen Rechnern ginge auch</p>
<pre><code class="language-cpp">int minmax(unsigned x, unsigned y, unsigned z) {
  return std::max(-1, static_cast&lt;int&gt;(std::min(x, std::min(y, z)));
}
</code></pre>
<p>...aber streng genommen ist die Umwandlung von unsigned nach int außerhalb des von int darstellbaren Wertebereichs <em>implementation-defined</em>, und man sollte sich nicht ohne Not undefiniertes Verhalten einfangen.</p>
</blockquote>
<p>1. Was bringt das, das nicht zu definieren?<br />
2. Ginge es so?</p>
<pre><code class="language-cpp">int minmax(unsigned x, unsigned y, unsigned z)
{
  return std::max(-1, (*((int *)(&amp;(std::min(x, std::min(y, z))))));
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1959133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959133</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Wed, 29 Sep 2010 18:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to ((smallest) &amp;amp;&amp;amp; (greater than -1)) fkt on Wed, 29 Sep 2010 17:42:20 GMT]]></title><description><![CDATA[<p>Zu 1.: Ich vermute, das hat historische Gründe. Nicht alle Computer haben die Zweierkomplementdarstellung benutzt; beispielsweise benutzten frühe PDPs, CDCs und UNIVACs das Einerkomplement, und einige frühe IBM-Mainframes benutzten überhaupt kein Komplement, sondern stellten einfach ein Vorzeichen vor den Betrag. Die UNIVAC 1100-Reihe wurde bis in die Achtziger Jahre fortgesetzt, also konnte man sich weder bei der Standardisierung von C noch bei der Entwicklung von C++ auf das Zweierkomplement verlassen.</p>
<p>Zu 2.: Mit Pointergecaste bist du da keinesfalls besser dran. Das Ergebnis von</p>
<pre><code class="language-cpp">int x = 2;
unsigned y = *((unsigned*)&amp;x);
</code></pre>
<p>dürfte nicht definiert sein; der Standard schreibt nicht vor, dass int und unsigned gleichen Wertes das gleiche Bitmuster haben müssen. Außerdem versuchst du so, std::max(int, unsigned) aufzurufen, welches nicht existiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1959156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1959156</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 29 Sep 2010 17:42:20 GMT</pubDate></item></channel></rss>