Post by Adhemerval ZanellaPost by Steve KarglPost by Adhemerval ZanellaAnd is having a different algorithm for single and double prevision
a blocker for a future patch proposal?
No. Given the comment in sinf.c that max ULP is 0.56072, I do note that
the current implementation of sinf in lib/msun is more accurate (for
interesting values of x). I also looked at single/s_sincosf.c. It is
rather dubious to have 80+ digit numerical constants for a float, which
at most has 9 relevant digits.
Also keep in mind my initial idea is to propose patches only to expf, powf,
logf, expf2, and log2f.
OK, so I peeked at expf. Comment claims max ulp of 0.502.
Exhaustive testing for normal numbers in relevent range for
the current implementation of expf(x) shows
Interval tested: [-18,88.72]
ULP: 0.90951, x = -5.19804668e+00f, /* 0xc0a65666 */
flt = 5.52735012e-03f, /* 0x3bb51ec6 */
dbl = 5.5273505437686398e-03, /* 0x3f76a3d8, 0xdd1aae8e */
But, then one looks at implementation details. msun's current
implementation is written in terms of single precision; while
the routine you're suggesting is written in terms of double_t.
So, achieving 0.502 ULP is due to having 53-bits in intermediate
results. It appears that the algorithm of the suggested code
cannot easily be generalized to double and long double without
implementing a multiple-precision routines.
Note, years ago, I submitted implementations for expf, exp,
ld80/expl, ld128/expl, logf, log, ld80/logl, and ld128/logl
based on papers by PTP Tang [1,2]. My versions for single
and double precision were not adopted even though these had
better accuracy. Either Bruce Evans improved or with Bruce's
help I improved the ld80 and ld128 routines, which were added
to msun. I know Bruce fixed minor issues with the single
and double precision routines, but he has not submitted patches.
1. PTP Tang, "Table-driven implementation of the exponential
function in IEEE floating-point arithmetic," ACM Trans. Math.
Soft., 15, 144-157 (1989).
2. PTP Tang, "Table-driven implementation of the logarithm
function in IEEE floating-point arithmetic," ACM Trans. Math.
Soft., 16, 378-400 (1990).
--
Steve