I know this is a recurring question, but I haven’t really found a useful answer yet. I’m basically looking for a fast approximation of the function acos in C++, I’d like to know if I can significantly beat the standard one.
But some of you might have insights on my specific problem: I’m writing a scientific program which I need to be very fast. The complexity of the main algorithm boils down to computing the following expression (many times with different parameters):
sin( acos(t_1) + acos(t_2) + ... + acos(t_n) )
where the t_i are known real (double) numbers, and n is very small (like smaller than 6). I need a precision of at least 1e-10. I’m currently using the standard sin and acos C++ functions.
Do you think I can significantly gain speed somehow? For those of you who know some maths, do you think it would be smart to expand that sine in order to get an algebraic expression in terms of the t_i (only involving square roots)?
Thank you your your answers.
As Jonas Wielicki mentions in the comments, there isn’t much precision trade-offs you can make.
Your best bet is to try and use the processor intrinsics for the functions (if your compiler doesn’t do this already) and using some math to reduce the amount of calculations necessary.
Also very important is to keep everything in a CPU-friendly format, make sure there are few cache misses, etc.
If you are calculating large amounts of functions like
acosperhaps moving to the GPU is an option for you?