digitalmars.D.bugs - [Issue 19712] New: std.math.sin and cos cast float to real before
- d-bugmail puremagic.com (35/35) Mar 01 2019 https://issues.dlang.org/show_bug.cgi?id=19712
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 puremagic.com Reporter: alex 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. --
Mar 01 2019