<?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[Scripterklärung...]]></title><description><![CDATA[<p>Ich habe mir folgenden Code zusammengebastelt(aus'm Internet, C-Buch MSDN usw.).<br />
Er dient zur Wurzel berrechnung mithilfe des Heron Algorithmus.<br />
Funzt auch soweit. Aber ich hab' keine Ahnung wie man so auf ein richtiges Ergebnis kommt. <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="😕"
    /><br />
Kann mir bitte mal jemand den Code erklären?</p>
<p>double _sqrt(double a)</p>
<p>{<br />
if(a&lt;0)<br />
{<br />
return NAN;<br />
}<br />
else if(a==0)<br />
{<br />
return 0;<br />
}<br />
else if(a&lt;1)<br />
{<br />
return 1/_sqrt(1/a);<br />
}<br />
else<br />
{<br />
return _sqrt(100u);<br />
}<br />
}</p>
<p>double _sqrt(double a,double a0,double a1,unsigned n)<br />
{<br />
double tmp=(a1+a0)/2.0f;<br />
if(n&lt;=0)<br />
{<br />
return tmp;<br />
}<br />
if((tmp<em>tmp)&lt;a)<br />
{<br />
a0=tmp;<br />
}<br />
else if((tmp</em>tmp)==a)<br />
{<br />
return tmp;<br />
}<br />
else<br />
{<br />
a1=tmp; }<br />
return (a0==a1)?a0:_sqrt(a,a0,a1,--n);</p>
<p>-----------------------------------------------------------------------------</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/127919/scripterklärung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 06:21:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127919.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 28 Nov 2005 18:33:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Scripterklärung... on Mon, 28 Nov 2005 18:33:59 GMT]]></title><description><![CDATA[<p>Ich habe mir folgenden Code zusammengebastelt(aus'm Internet, C-Buch MSDN usw.).<br />
Er dient zur Wurzel berrechnung mithilfe des Heron Algorithmus.<br />
Funzt auch soweit. Aber ich hab' keine Ahnung wie man so auf ein richtiges Ergebnis kommt. <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="😕"
    /><br />
Kann mir bitte mal jemand den Code erklären?</p>
<p>double _sqrt(double a)</p>
<p>{<br />
if(a&lt;0)<br />
{<br />
return NAN;<br />
}<br />
else if(a==0)<br />
{<br />
return 0;<br />
}<br />
else if(a&lt;1)<br />
{<br />
return 1/_sqrt(1/a);<br />
}<br />
else<br />
{<br />
return _sqrt(100u);<br />
}<br />
}</p>
<p>double _sqrt(double a,double a0,double a1,unsigned n)<br />
{<br />
double tmp=(a1+a0)/2.0f;<br />
if(n&lt;=0)<br />
{<br />
return tmp;<br />
}<br />
if((tmp<em>tmp)&lt;a)<br />
{<br />
a0=tmp;<br />
}<br />
else if((tmp</em>tmp)==a)<br />
{<br />
return tmp;<br />
}<br />
else<br />
{<br />
a1=tmp; }<br />
return (a0==a1)?a0:_sqrt(a,a0,a1,--n);</p>
<p>-----------------------------------------------------------------------------</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929153</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929153</guid><dc:creator><![CDATA[LCperca]]></dc:creator><pubDate>Mon, 28 Nov 2005 18:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Scripterklärung... on Tue, 29 Nov 2005 08:00:11 GMT]]></title><description><![CDATA[<p>Spendiert dem Herrn doch bitte ein paar cpp-Tags <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>
<pre><code class="language-cpp">double _sqrt(double a)
{
  if(a&lt;0)    
  {
    return NAN;    
  }
  else if(a==0)    
  {
    return 0;
  }
  else if(a&lt;1)
  {
    return 1/_sqrt(1/a);
  }
  else
  {
    return _sqrt(100u);
  }
}
</code></pre>
<p>Das ist eine &quot;einfache Fallunterscheidung - und irgendwie glaube ich nicht, daß die so funktionieren kann. Für a&gt;=1 führt das zu einer Endlosschleife (oder, wenn du ein _sqrt(unsigned int) überladen hast, zu einem falschen Ergebnis).</p>
<pre><code class="language-cpp">double _sqrt(double a,double a0,double a1,unsigned n)
{
  double tmp=(a1+a0)/2.0f;  
  if(n&lt;=0)    
  {    
    return tmp;   
  }
  if((tmp*tmp)&lt;a)    
  {
    a0=tmp;    
  }
  else if((tmp*tmp)==a)
  {
    return tmp;    
  }
  else    
  {
    a1=tmp;
  }
  return (a0==a1)?a0:_sqrt(a,a0,a1,--n);
}
</code></pre>
<p>Wurzelberechnung durch eine Reihenentwicklung - schau mal in deinem Lieblings-Mathebuch nach, wie das gehen soll.<br />
(btw hätte ich dafür eher eine Schleife verwendet als einen rekursiven Aufruf)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/929420</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929420</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 29 Nov 2005 08:00:11 GMT</pubDate></item><item><title><![CDATA[Reply to Scripterklärung... on Tue, 29 Nov 2005 10:16:54 GMT]]></title><description><![CDATA[<p>der code ist zu kompliziert. mach erstmal den code so einfach wie möglich und wenn er geht, mach ihn wieder kompliziert, aber immer mit nachgucken, ob's noch geht.</p>
<pre><code class="language-cpp">double sqrt(double a){
   assert(a&gt;=1);//für die zauberhafte bedingung
   double x=a;//ich fange zu weit rechts an
   double n;
   do{
      n=(x+a/x)/2;//n ist bessere näherung, aber auch zu weit rechts
         //sieht man deutlich, wenn man heron als sonderfal von newton 
         //betrachtet und guckt, wo die tangente die x-achse schneidet 
         //mit der parabel f(x)=x^2-a
   }while(n&lt;x);//ändert sich erst, wenn maschinengenauigkeit erreicht
   return n;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/929503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/929503</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 29 Nov 2005 10:16:54 GMT</pubDate></item></channel></rss>