libnonius / nonius

A C++ micro-benchmarking framework
https://nonius.io
Creative Commons Zero v1.0 Universal
358 stars 47 forks source link

Replace boost math functions. #85

Open bitshifter opened 7 years ago

bitshifter commented 7 years ago

Tests added using common input values and comparing against the output from original boost::math implementations.

The normal distribution CDF function is taken from the example code at http://en.cppreference.com/w/cpp/numeric/math/erfc.

The erf_inv is based on code accompanying the article "Approximating the erfinv function" in GPU Computing Gems, Volume 2. Orginally I was using the approximation described at https://en.wikipedia.org/wiki/Error_function#Approximation_with_elementary_functions but found them to be a lot less accurate than the boost::math version for some inputs.

I don't have a great background in this kind of maths, I've found algorithm descriptions through Googling and checked correctness by comparing against the values returned by boost math. It seems to be OK.

rmartinho commented 7 years ago

So this fixes #48? Very cool, thanks! I shall review and merge this with the next batch of free time :D

bitshifter commented 7 years ago

Yep, I think it should fix #48 :)