<?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[Quadratwurzelverfahren]]></title><description><![CDATA[<p>Hallo leute</p>
<p>ich bin heute über ein Verfahren gestolpert was ich nicht ganz verstehe.</p>
<p>es geht um quadratwurzeln, bzw um eine verfahren sie zu errechnen(in der spiele programmierung)...</p>
<pre><code class="language-cpp">// wurzel.cpp
inline float FastWurzelExact(float r) //ist klar
{
unsigned long *ptr = NULL; //ein zeiger auf ein unsigned

if(r == 0.0f)
return 0.0f; //um unnötiges zu vermeiden
if(r &lt; 0.0f)
r = -r;

float Value = r; //das ist ein startwert
float halfValue = 0.5f*r; //zweiter wert (wegen heron algorithmus)
ptr = (unsigned long*)&amp;r; // was heisst das?
*ptr=(0xbe6f0000-*ptr)&gt;&gt;1; // und das?
float temp1Wurzel = r;
temp1Wurzel *= 1.5f-temp1Wurzel*temp1Wurzel*halfValue;
temp1Wurzel *= 1.5f-temp1Wurzel*temp1Wurzel*halfValue;
return Value*temp1Wurzel; //rest ist wieder klar
}
</code></pre>
<p>also das ist eine mischung aus dem heron algorithmus und einem trick auf die interne speicherung von gleitkommazahlen zuzugreifen</p>
<p>aber wie geht das? mit dieser hexzahl (ist übrigens 3194945536 im dezimal system)???<br />
und was heisst (unsigned*)&amp;r ???</p>
<p>mfg mosho</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209985/quadratwurzelverfahren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 18:17:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209985.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Apr 2008 16:35:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sat, 05 Apr 2008 16:35:12 GMT]]></title><description><![CDATA[<p>Hallo leute</p>
<p>ich bin heute über ein Verfahren gestolpert was ich nicht ganz verstehe.</p>
<p>es geht um quadratwurzeln, bzw um eine verfahren sie zu errechnen(in der spiele programmierung)...</p>
<pre><code class="language-cpp">// wurzel.cpp
inline float FastWurzelExact(float r) //ist klar
{
unsigned long *ptr = NULL; //ein zeiger auf ein unsigned

if(r == 0.0f)
return 0.0f; //um unnötiges zu vermeiden
if(r &lt; 0.0f)
r = -r;

float Value = r; //das ist ein startwert
float halfValue = 0.5f*r; //zweiter wert (wegen heron algorithmus)
ptr = (unsigned long*)&amp;r; // was heisst das?
*ptr=(0xbe6f0000-*ptr)&gt;&gt;1; // und das?
float temp1Wurzel = r;
temp1Wurzel *= 1.5f-temp1Wurzel*temp1Wurzel*halfValue;
temp1Wurzel *= 1.5f-temp1Wurzel*temp1Wurzel*halfValue;
return Value*temp1Wurzel; //rest ist wieder klar
}
</code></pre>
<p>also das ist eine mischung aus dem heron algorithmus und einem trick auf die interne speicherung von gleitkommazahlen zuzugreifen</p>
<p>aber wie geht das? mit dieser hexzahl (ist übrigens 3194945536 im dezimal system)???<br />
und was heisst (unsigned*)&amp;r ???</p>
<p>mfg mosho</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487054</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487054</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 05 Apr 2008 16:35:12 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sat, 05 Apr 2008 17:05:26 GMT]]></title><description><![CDATA[<p>Zunächst zur binären Darstellung von Gleitkommazahlen:<br />
<a href="http://de.wikipedia.org/wiki/Gleitkommazahl#IEEE_754_und_andere_Normen" rel="nofollow">http://de.wikipedia.org/wiki/Gleitkommazahl#IEEE_754_und_andere_Normen</a></p>
<p>Die Zeile</p>
<pre><code class="language-cpp">ptr = (unsigned long*)&amp;r;
</code></pre>
<p>weist dem long-Zeiger die Adresse der Float-Zahl r zu; über den Zeiger kann man nun die Gleitkommazahl als Integerzahl behandeln.</p>
<p>Hier</p>
<pre><code class="language-cpp">*ptr=(0xbe6f0000-*ptr)&gt;&gt;1;
</code></pre>
<p>wird der als Integerzahl interpretierte Wert der Gleitkommazahl von 0xBE6F0000 abgezogen und um ein Bit nach rechts verschoben. Warum auch immer.</p>
<p>Wie das nun genau funktioniert, kannst du <a href="http://www.azillionmonkeys.com/qed/sqroot.html" rel="nofollow">hier</a> nachlesen.</p>
<p>Achja, und noch ein Tip: benutze am besten einfach std::sqrt() aus &lt;cmath&gt;. So etwas lohnt sich meist nicht, da viel zu plattformabhängig, fehleranfällig etc.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487070</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487070</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Sat, 05 Apr 2008 17:05:26 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sat, 05 Apr 2008 18:44:56 GMT]]></title><description><![CDATA[<p>ja aber es ist viel schneller</p>
<p>und es geht um spiele programmieren...</p>
<p>naja danke ichw erd mir das mal angucken</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487114</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 05 Apr 2008 18:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sat, 05 Apr 2008 18:48:47 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>ja aber es ist viel schneller</p>
<p>und es geht um spiele programmieren...</p>
<p>naja danke ichw erd mir das mal angucken</p>
</blockquote>
<p>Glaubst du, dass die Typen, die diese Funktionen implementiet haben sich nix dabei geadacht haben?! Und das du das besser machen kannst, als ein erfahrener Programmierer?!</p>
<p>Und glaub mir.. In der Spieleprogrammierung hast du ganz andere Flaschenhälse, als ein paar sqrt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487117</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487117</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 05 Apr 2008 18:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sun, 06 Apr 2008 09:43:14 GMT]]></title><description><![CDATA[<p>ach quatsch ich will nicht ein besseres verfahren schreiben sodnern das eifnach nur verstehen...</p>
<p>wobei ich hab den source code von quake 3<br />
und da gibts auch so ein wurzelverfahren, aber das funktioniert nicht annähernd so gut wie das hier</p>
<p>(wurzel 9 -&gt; quake: 0.345432)<br />
(wurzel 9 -&gt; das hier: 2.999999)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487278</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 06 Apr 2008 09:43:14 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sun, 06 Apr 2008 10:38:22 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wobei ich hab den source code von quake 3<br />
und da gibts auch so ein wurzelverfahren, aber das funktioniert nicht annähernd so gut wie das hier</p>
</blockquote>
<p>Das funktioniert ganz gut, du hast bloß nicht verstanden, dass dabei gar nicht die Wurzel berechnet wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487306</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Sun, 06 Apr 2008 10:38:22 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Sun, 06 Apr 2008 20:33:24 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>wobei ich hab den source code von quake 3<br />
und da gibts auch so ein wurzelverfahren, aber das funktioniert nicht annähernd so gut wie das hier</p>
</blockquote>
<p>Das funktioniert ganz gut, du hast bloß nicht verstanden, dass dabei gar nicht die Wurzel berechnet wird.</p>
</blockquote>
<p>Fast Inverse Squareroot.</p>
<p>Übrigens, ich hab das mal aus Interesse &quot;gebencht&quot;. Mittlerweile ist der Geschwindigkeitsvorteil nicht mehr so nennenswert wie vielleicht zu Pentium MMX Zeiten (soll heißen, es lohnt sich nicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1487581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1487581</guid><dc:creator><![CDATA[Leu]]></dc:creator><pubDate>Sun, 06 Apr 2008 20:33:24 GMT</pubDate></item><item><title><![CDATA[Reply to Quadratwurzelverfahren on Mon, 07 Apr 2008 19:09:54 GMT]]></title><description><![CDATA[<p>naja ich hab mir auch mal so einen benchmark geshcrieben</p>
<p>bis zu eienr millionen wurzeln pro sekudne ist alles ok</p>
<p>aber alles dadrüber braucht sqrt aus 'math.h' oder 'cmath' einige sekunden</p>
<p>10.000.000 wurzeln in knapp 20 oder 30 sekunden vom normalen sqrt errechnet</p>
<p>mit meinem vorgestellten geht das ganze in knapp 1 sekunde<br />
und die näherung sit auch gut</p>
<p>wie gesagt wurzel 9 ist 2.99999...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1488169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1488169</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 07 Apr 2008 19:09:54 GMT</pubDate></item></channel></rss>