On Fri, Aug 4, 2017 at 2:26 PM, Alexander Monakov <amona...@ispras.ru> wrote: > On Fri, 4 Aug 2017, Wilco Dijkstra wrote: >> This patch simplifies pow (C, x) into exp (x * C1), where C1 = log (C). > > I don't think you can do that for non-positive C.
Hmm, the question is also how this interacts with other folders like sqrt (pow (x, y)) -> pow (|x|, y * 0,5)? Also we seem to miss pow (2, x) -> exp2 (x) and pow (10, x) -> pow10/exp10, those may be a better fit than exp (log (2/10) * x)? OTOH for fast-math canonicalization getting rid of exp2/10 and pow10 might be beneficial. >> Do this only for fast-math as accuracy is reduced. This is much faster >> since pow is more complex than exp - with a current GLIBC the speedup >> is more than 7 times for this transformation. > > Is it bound to be so on future glibc revisions and non-glibc platforms? And how is accuracy affected? I think the transform is only reasonable for log (C) being close to e, 2 or 10 (using exp, exp2 or exp10). Can you provide an idea on whether there's a systematic error (with glibc) and how that behaves over the parameter space? Oh, and what value of C does the benchmark that triggered this have? Richard. > Alexander