[Issue 19712] New: std.math.sin and cos cast float to real before evaluating.
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Fri Mar  1 12:33:09 UTC 2019
    
    
  
https://issues.dlang.org/show_bug.cgi?id=19712
          Issue ID: 19712
           Summary: std.math.sin and cos cast float to real before
                    evaluating.
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: minor
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: alex at sunopti.com
import std.stdio;
import std.math;
import std.random;
import core.stdc.math;
import std.datetime;
void main()
{
        auto r = benchmark!(
()=> std.math.sin(uniform(0.0f,1.0f))
,
()=> core.stdc.math.sinf(uniform(0.0f,1.0f))
)(1000000);
        writefln("%s\n%s",r[0].usecs,r[1].usecs);
}
With gdc-8, this shows around a 4 times difference in speed between
std.math.sin and core.stdc.math.sinf.
Around 1.5 times difference with dmd via dlang.org web interface
This is because std.math.sin(float) casts the argument to real and then
evaluates it.
Apparently ldc does this better.
--
    
    
More information about the Digitalmars-d-bugs
mailing list