I just pushed a new version of the 2^x approximation as fast_exp2() to master 
and removed the old approximations. Commit 
7d919e98bb116f98a6b05e56f8a05edb6825692e still has the old functions, and a 
comparative benchmark.
The approximation is based on the 5th order polynomial with minimal relative 
error, approximating 2^x within [-0.5...+0.5], generated with 
[Sollya](http://sollya.gforge.inria.fr/). The result is almost as accurate as 
the old bse_approx6_exp2(), although fast_exp() uses only float arithmetic. It 
is also significantly faster than the old functions and the optimized exp2f() 
variant recently added to glibc and musl 
([ARM-software/exp2f](https://github.com/ARM-software/optimized-routines/blob/master/math/exp2f.c)).

~~~~
git checkout 7d919e98bb116f98a6b05e56f8a05edb6825692e && make 
BSE_TEST=slow out/tests/suite1 fast_math_test  fast_math_bench 
  RUN…     fast_math_test
  PASS     fast_math_test
  RUN…     fast_math_bench
  BENCH    fast_exp2          # timing: fastest=0.000392s calls=458605760.0/s 
diff=0.00000033028512169686 (@0.734155)
  BENCH    arm_exp2f          # timing: fastest=0.000532s calls=338185006.7/s 
diff=0.00000005979062378536 (@0.958382)
  BENCH    exp2f              # timing: fastest=0.000650s calls=276832337.1/s 
diff=0.00000005979062378536 (@0.958382)
  BENCH    bse_approx5_exp2   # timing: fastest=0.000768s calls=234464124.9/s 
diff=0.00000458521965707170 (@0.500000)
  BENCH    bse_approx6_exp2   # timing: fastest=0.000847s calls=212474853.5/s 
diff=0.00000022838359092781 (@0.500000)
  BENCH    bse_approx7_exp2   # timing: fastest=0.000854s calls=210667974.8/s 
diff=0.00000000994037496760 (@0.500000)
  PASS     fast_math_bench
~~~~


-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/tim-janik/beast/pull/124#issuecomment-575412715
_______________________________________________
beast mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/beast

Reply via email to