<?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[sinus &#x2F; cosinus]]></title><description><![CDATA[<p>Gut, passt vieleicht bisschen schlecht ins C++ Forum, is aber inline Assembler.</p>
<p>1. Ich suche den Inline Assembler Quellcode einer cos, sin, tan Funktion(nach möglichkeit x86)</p>
<p>2. Ist die Prozessorklasse wichtig? <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="😕"
    /></p>
<p>Die hier habe ich mal im Internet gefunden:</p>
<pre><code class="language-cpp">inline const float sqrt(const float&amp; value)
{
	float result;

	_asm
	{
		mov eax, value
		sub eax, 0x3f800000
		sar eax, 1
		add eax, 0x3f800000
		mov result, eax
	}

	return(result);
}
</code></pre>
<p>--&gt; ist auch einiges schneller, als die sqrt aus &lt;cmath&gt;</p>
<p>3. Weiß jemand, warum?<br />
4. Kann man die Funktion noch optimieren? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/151725/sinus-cosinus</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 15:08:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/151725.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jun 2006 22:12:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Wed, 28 Jun 2006 22:12:59 GMT]]></title><description><![CDATA[<p>Gut, passt vieleicht bisschen schlecht ins C++ Forum, is aber inline Assembler.</p>
<p>1. Ich suche den Inline Assembler Quellcode einer cos, sin, tan Funktion(nach möglichkeit x86)</p>
<p>2. Ist die Prozessorklasse wichtig? <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="😕"
    /></p>
<p>Die hier habe ich mal im Internet gefunden:</p>
<pre><code class="language-cpp">inline const float sqrt(const float&amp; value)
{
	float result;

	_asm
	{
		mov eax, value
		sub eax, 0x3f800000
		sar eax, 1
		add eax, 0x3f800000
		mov result, eax
	}

	return(result);
}
</code></pre>
<p>--&gt; ist auch einiges schneller, als die sqrt aus &lt;cmath&gt;</p>
<p>3. Weiß jemand, warum?<br />
4. Kann man die Funktion noch optimieren? <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="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087982</guid><dc:creator><![CDATA[Tc++H]]></dc:creator><pubDate>Wed, 28 Jun 2006 22:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Wed, 28 Jun 2006 22:24:58 GMT]]></title><description><![CDATA[<p>Tc++H schrieb:</p>
<blockquote>
<p>Gut, passt vieleicht bisschen schlecht ins C++ Forum, is aber inline Assembler.</p>
</blockquote>
<p>und wozu ist wohl das assemblerforum da?</p>
<blockquote>
<p>1. Ich suche den Inline Assembler Quellcode einer cos, sin, tan Funktion(nach möglichkeit x86)</p>
<p>2. Ist die Prozessorklasse wichtig? <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="😕"
    /></p>
</blockquote>
<p>sie beeinflußt die auswahl, also ja.</p>
<blockquote>
<p>Die hier habe ich mal im Internet gefunden:</p>
<p>--&gt; ist auch einiges schneller, als die sqrt aus &lt;cmath&gt;<br />
3. Weiß jemand, warum?</p>
</blockquote>
<p>weil sie nicht die wurzel berechnet.</p>
<blockquote>
<p>4. Kann man die Funktion noch optimieren? <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="😕"
    /></p>
</blockquote>
<p>schon möglich. was willst du denn daran optimieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1087987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1087987</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 28 Jun 2006 22:24:58 GMT</pubDate></item><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Thu, 29 Jun 2006 02:41:01 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Tc++H schrieb:</p>
<blockquote>
<p>Gut, passt vieleicht bisschen schlecht ins C++ Forum, is aber inline Assembler.</p>
</blockquote>
<p>und wozu ist wohl das assemblerforum da?</p>
</blockquote>
<p>Hey, komm schon... Er benutzt doch nichtmal 'nen Lötkolben... <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>
<p>Tc++H schrieb:</p>
<blockquote>
<p>1. Ich suche den Inline Assembler Quellcode einer cos, sin, tan Funktion(nach möglichkeit x86)</p>
</blockquote>
<p>Ich find x86 für diese Aufgabe etwas... naja, wie soll ich's sagen... <em>deplaziert</em></p>
<p>Tc++H schrieb:</p>
<blockquote>
<p>Die hier habe ich mal im Internet gefunden:</p>
<pre><code class="language-cpp">inline const float sqrt(const float&amp; value)
{
	float result;

	_asm
	{
		mov eax, value
		sub eax, 0x3f800000
		sar eax, 1
		add eax, 0x3f800000
		mov result, eax
	}

	return(result);
}
</code></pre>
<p>--&gt; ist auch einiges schneller, als die sqrt aus &lt;cmath&gt;</p>
<p>3. Weiß jemand, warum?</p>
</blockquote>
<p>*lol*</p>
<p>Tc++H schrieb:</p>
<blockquote>
<p>4. Kann man die Funktion noch optimieren? <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="😕"
    /></p>
</blockquote>
<p>Ne, <em>die</em> Funktion nicht <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>Ich würd ja den 80x87 (AKA Math Coprocessor) vorschlagen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

double sine( double x )
{
    __asm {
        FNINIT  ; Coprozessor initialisieren
        FLD x   ; x nach ST( 0 )
        FSIN    ; sinus davon
    }
} // ST( 0 ) - Ergebnis von FSIN - wird zurückgegeben

int main( )
{
    double x = 0.9;
    cout &lt;&lt; &quot;sin( &quot; &lt;&lt; x &lt;&lt; &quot; ) = &quot; &lt;&lt; sine( x ) &lt;&lt; endl;
}
</code></pre>
<p>Greetz, Swordfish</p>
<p>PS: Und, was sagt ihr zu meinem <em>allerersten</em> Assemblerprogramm für den 80x87? <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/1088019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088019</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 29 Jun 2006 02:41:01 GMT</pubDate></item><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Thu, 29 Jun 2006 03:31:55 GMT]]></title><description><![CDATA[<p>Hab' grad mal 'ne Laufzeitmessung gemacht. Erschreckend:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cmath&gt;
#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

#include &lt;windows.h&gt;

using namespace std;

__forceinline double sine( double x )
{
    __asm {
        FNINIT
        FLD x
        FSIN
    }
}

int main( )
{
    srand( static_cast&lt; unsigned int &gt;( time( 0 ) ) );

    double x[ 1000 ];

    for( register unsigned int i = 0; i &lt; 1000; ++i ) {
        x[ i ] = ( 10000.0 * rand( ) / static_cast&lt; float &gt;( RAND_MAX ) ) /
                 ( 10000.0 * rand( ) / static_cast&lt; float &gt;( RAND_MAX ) );
    }

    __int64 pc_freq, start, stop;

    QueryPerformanceFrequency( reinterpret_cast&lt; LARGE_INTEGER* &gt;( &amp;pc_freq ) );
    QueryPerformanceCounter( reinterpret_cast&lt; LARGE_INTEGER* &gt;( &amp;start ) );

    for( register unsigned int i = 0; i &lt; 1000; ++i )
        sine( x[ i ] );

    QueryPerformanceCounter( reinterpret_cast&lt; LARGE_INTEGER* &gt;( &amp;stop ) );

    double total_time = ( static_cast&lt; double &gt;( stop - start ) / pc_freq ) * 1000.0;
    cout &lt;&lt; &quot;Total time elapsed ( 1000 calls to sine( ) ): &quot; &lt;&lt; fixed &lt;&lt; total_time &lt;&lt; &quot; ms&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Average time elapsed per call: &quot; &lt;&lt; fixed &lt;&lt; total_time &lt;&lt; &quot; us&quot; &lt;&lt; endl &lt;&lt; endl;

    QueryPerformanceCounter( reinterpret_cast&lt; LARGE_INTEGER* &gt;( &amp;start ) );

    for( register unsigned int i = 0; i &lt; 1000; ++i )
        sin( x[ i ] );

    QueryPerformanceCounter( reinterpret_cast&lt; LARGE_INTEGER* &gt;( &amp;stop ) );

    total_time = ( static_cast&lt; double &gt;( stop - start ) / pc_freq ) * 1000.0;
    cout &lt;&lt; &quot;Total time elapsed ( 1000 calls to sin( ) ): &quot; &lt;&lt; fixed &lt;&lt; total_time &lt;&lt; &quot; ms&quot; &lt;&lt; endl;
    cout &lt;&lt; &quot;Average time elapsed per call: &quot; &lt;&lt; fixed &lt;&lt; total_time &lt;&lt; &quot; us&quot; &lt;&lt; endl &lt;&lt; endl;
}
</code></pre>
<p>Befehlszeile:</p>
<pre><code>/O2 /Og /Ob2 /Oi /Ot /Oy /GL /G5 /D &quot;WIN32&quot; /D &quot;NDEBUG&quot; /D &quot;_CONSOLE&quot; /D &quot;_MBCS&quot; /GF /FD /EHsc /ML /GS /Fo&quot;Release/&quot; /Fd&quot;Release/vc70.pdb&quot; /W4 /WX /nologo /c /Wp64 /Gd /TP
</code></pre>
<p>Output:</p>
<pre><code>Total time elapsed ( 1000 calls to sine( ) ): 0.166502 ms
Average time elapsed per call: 0.166502 us

Total time elapsed ( 1000 calls to sin( ) ): 0.002514 ms
Average time elapsed per call: 0.002514 us
</code></pre>
<p>Da sollte wohl doch eher SSE, SSE2, 3DNOW etc. dran <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>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088024</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088024</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 29 Jun 2006 03:31:55 GMT</pubDate></item><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Thu, 29 Jun 2006 06:59:02 GMT]]></title><description><![CDATA[<p>Swordfish schrieb:</p>
<blockquote>
<p>PS: Und, was sagt ihr zu meinem <em>allerersten</em> Assemblerprogramm für den 80x87? <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>
</blockquote>
<p>sehr hübsch. <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>Swordfish schrieb:</p>
<blockquote>
<p>Hab' grad mal 'ne Laufzeitmessung gemacht. Erschreckend:</p>
</blockquote>
<p>assembler ist zwar low-level aber deswegen nicht unbedingt einfach. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088077</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 29 Jun 2006 06:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Thu, 29 Jun 2006 07:48:05 GMT]]></title><description><![CDATA[<p>Meinst du, man könnte die CRT mit SSE und Kohorten überflügeln?</p>
<p>Greetz, Swordfish</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088103</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Thu, 29 Jun 2006 07:48:05 GMT</pubDate></item><item><title><![CDATA[Reply to sinus &#x2F; cosinus on Thu, 29 Jun 2006 08:00:49 GMT]]></title><description><![CDATA[<p>nein. gib dem compiler die richtigen switches und der benutzt sowieso intrinsics. schon der versuch dieser microoptimierung von primitiven muss fehlschlagen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1088112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1088112</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 29 Jun 2006 08:00:49 GMT</pubDate></item></channel></rss>