This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On 11/5/18 1:19 PM, Joseph Myers wrote:
Excellent, I missed the replacement of expq (lgammaq (x)) with the re-entrant lgamma with the good sign.On Sun, 4 Nov 2018, Ed Smith-Rowland wrote:I looked in glibc. Unfortunately, I see how they have the same mistake: glibc/math/w_tgammal_compat.c: long double __tgammal(long double x) { int local_signgam; long double y = __ieee754_gammal_r(x,&local_signgam); ... return local_signgam < 0 ? - y : y; } I'm very sure this is where tgammaq came from. Ditto for glibc/math/w_tgamma_compat.c and glibc/math/w_tgammaf_compat.c.No, that's not a mistake. __ieee754_gammal_r returns +/- the gamma function and sets the integer pointed to by the second argument to indicate whether to negate the result. (This isn't a particularly good interface design for tgamma, as opposed to lgamma; unfortunately __gammal_r_finite, with this interface, is a public ABI.)
Thank you. I'll let someone else check this off ;-)
FWIW, I'd like to see C++ at least return narrow types like
template<typename _Tp>
struct lgamma_t
{
_Tp log_abs_gamma; // O something less verbose.
int sign; // Maybe try for same size as _Tp.
};
C could do something like also. That's a discussion for another forum.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |