gb icon indicating copy to clipboard operation
gb copied to clipboard

Improving Quality of Exponential and Logarithm Functions

Open kphillisjr opened this issue 7 years ago • 2 comments

I was looking over the various math functions and noticed that there is a lot of error in the implementation of the Logarithm and Exponential functions. This is after applying the Intrinsic-free version of the square root function.

// The Square-Root Function.
sqrtf(x);
// Fast and Simple alternative... 
expf(0.5f*logf(x));

// the Power function
powf(a, b);
// alternative method:
expf(b*logf(a));

Now as far as improving the Accuracy of the Exponential and Logarithm Functions. I suggest looking into the work completed by Ping Tak Peter Tang in the following series of articles from the early 1990s and late 1980s.

  • Table-driven implementation of the Expm1 function in IEEE floating-point arithmetic. ACM Transactions on Mathematical Software 18(2): 211-222 (1992)
  • Table-lookup algorithms for elementary functions and their error analysis. IEEE Symposium on Computer Arithmetic 1991: 232-236
  • Accurate and efficient testing of the exponential and logarithm functions. ACM Transactions on Mathematical Software 16(3): 185-200 (1990)
  • Table-driven implementation of the exponential function in IEEE floating-point arithmetic. ACM Transactions on Mathematical Software ( 15(2): 144-157 (1989)

Edit: Added note about alternative method for calling the pow function.

kphillisjr avatar Sep 05 '18 00:09 kphillisjr

I was looking over the various math functions and noticed that there is a lot of error in the implementation of the Logarithm and Exponential functions. This is after applying the Intrinsic-free version of the square root function. ...

@kphillisjr these functions are meant to be fast operations rather than precise ones. They are to be used when x is small.

Sent with GitHawk

gingerBill avatar Sep 06 '18 08:09 gingerBill

Thanks for the response, and I found a good alternative ( see: https://github.com/yui0/slibs/blob/master/fmath.h ). I just have not tested the overall speed just yet.

kphillisjr avatar Sep 09 '18 03:09 kphillisjr