<br><br><div class="gmail_quote">On Wed, Sep 21, 2011 at 7:04 AM, Ivo Smits <span dir="ltr">&lt;<a href="mailto:Ivo@ufo-net.nl">Ivo@ufo-net.nl</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Op 21-9-2011 8:31, noisecrime schreef:<br>
&gt; ...<br>
<div class="im">&gt;<br>
&gt; Essentially the function has three nested loops, all of which iterate the<br>
&gt; same number of times every call. The inner loop is a single line of simple<br>
&gt; arithmetic instructions akin to  x[i] = y[i] + (a * ( y[s] + y[t] + y[u] +<br>
&gt; y[v]) )/c. It normally completes in a few milliseconds, but when passing in<br>
&gt; the troublesome viscosity value it slows down quickly to taking half a<br>
&gt; second!<br>
</div>I have seen similar behaviour on MS .Net in an audio processing<br>
application. The slowdown there was caused by arithmetic operations on a<br>
non-value (NaN/Infinity/negative infinity). Such an operation will again<br>
result in a non-value, which might explain why the slowdown propagates.<br>
You could easily check for these values in your code.<br>
<br>
I don&#39;t know exactly why these things cause such a slowdown. Maybe there<br>
is some (hardware) exception processing getting in the way, but that&#39;s<br>
just guessing. In my case it helped a lot to check the result for these<br>
3 non-values, and set it to some valid value instead. It&#39;s not a proper<br>
solution, but in my case helped to keep the application useable even for<br>
incorrect input values.<br></blockquote><div><br></div><div>NaN and denormals are many times slower than regular numbers.</div><div><br></div><div> </div></div><br>