<p dir="ltr"><br>
On 24 Aug 2014 14:09, "ketmar via Digitalmars-d-announce" <<a href="mailto:digitalmars-d-announce@puremagic.com">digitalmars-d-announce@puremagic.com</a>> wrote:<br>
><br>
> On Sun, 24 Aug 2014 12:51:10 +0000<br>
> Mike via Digitalmars-d-announce <<a href="mailto:digitalmars-d-announce@puremagic.com">digitalmars-d-announce@puremagic.com</a>><br>
> wrote:<br>
><br>
> > 5. Using C's floor instead of D's floor. - very significant (why?)<br>
> gcc/clang inlines floorf().<br>
><br>
> gdc generates calls to floor() in both cases, C floor() is just faster.<br>
> i.e. gdc fails to see that floor() can be converted to intrinsic.<br>
><br>
> the same thing with DMD i believe.</p>
<p dir="ltr">That's because floor isn't an intrinsic.  The crippling speed issue was the fact that floor computed and returned at real precision.  On recent (sandybridge?) CPU's, it was found that x87 does more ill than good.  So I changed it to a template in Phobos (and did some nice tidy ups in the process).  This will be pulled down in the 2.066 merge.</p>

<p dir="ltr">Speed improvements were discussed in the PR and in the original pnoise thread.  Though it's very likely that a hand optimised SSE3 assembly implementation in C's mathlib might still be faster.</p>
<p dir="ltr">Iain.</p>