Fix tgamma errno setting on underflow (bug 6810).

This commit is contained in:
Joseph Myers 2013-12-05 14:01:41 +00:00
parent bbf37bdc12
commit e47cc4e0ed
9 changed files with 2696 additions and 2621 deletions

View File

@ -1,5 +1,18 @@
2013-12-05 Joseph Myers <joseph@codesourcery.com>
[BZ #6810]
* math/w_tgamma.c: Include <errno.h>.
(__tgamma): Use __glibc_unlikely. Set errno on underflow to 0.
* math/w_tgammaf.c: Include <errno.h>.
(__tgammaf): Use __glibc_unlikely. Set errno on underflow to 0.
* math/w_tgammal.c: Include <errno.h>.
(__tgammal): Use __glibc_unlikely. Set errno on underflow to 0.
* math/auto-libm-test-in: Do not allow missing errno on tgamma
underflow. Add more tgamma tests.
* math/auto-libm-test-out: Regenerated.
* sysdeps/i386/fpu/libm-test-ulps: Update.
* sysdeps/x86_64/fpu/libm-test-ulps: Likewise.
* math/auto-libm-test-in: Add tests of log, log10, log1p, log2,
sin, sinh, tan, tanh, tgamma, y0 and y1.
* math/auto-libm-test-out: Regenerated.

26
NEWS
View File

@ -9,19 +9,19 @@ Version 2.19
* The following bugs are resolved with this release:
156, 387, 431, 832, 926, 2801, 4772, 6786, 6787, 6807, 7003, 9954, 10253,
10278, 11087, 11157, 11214, 12486, 13028, 13982, 13985, 14029, 14032,
14143, 14155, 14547, 14699, 14752, 14876, 14910, 15004, 15048, 15218,
15268, 15277, 15308, 15362, 15374, 15400, 15425, 15427, 15483, 15522,
15531, 15532, 15601, 15608, 15609, 15610, 15632, 15640, 15670, 15672,
15680, 15681, 15723, 15734, 15735, 15736, 15748, 15749, 15754, 15760,
15763, 15764, 15797, 15799, 15825, 15844, 15847, 15849, 15855, 15856,
15857, 15859, 15867, 15886, 15887, 15890, 15892, 15893, 15895, 15897,
15901, 15905, 15909, 15915, 15917, 15919, 15921, 15923, 15939, 15941,
15948, 15963, 15966, 15985, 15988, 15997, 16032, 16034, 16036, 16037,
16038, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112,
16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195, 16214,
16245, 16271, 16274, 16283, 16289.
156, 387, 431, 832, 926, 2801, 4772, 6786, 6787, 6807, 6810, 7003, 9954,
10253, 10278, 11087, 11157, 11214, 12486, 13028, 13982, 13985, 14029,
14032, 14143, 14155, 14547, 14699, 14752, 14876, 14910, 15004, 15048,
15218, 15268, 15277, 15308, 15362, 15374, 15400, 15425, 15427, 15483,
15522, 15531, 15532, 15601, 15608, 15609, 15610, 15632, 15640, 15670,
15672, 15680, 15681, 15723, 15734, 15735, 15736, 15748, 15749, 15754,
15760, 15763, 15764, 15797, 15799, 15825, 15844, 15847, 15849, 15855,
15856, 15857, 15859, 15867, 15886, 15887, 15890, 15892, 15893, 15895,
15897, 15901, 15905, 15909, 15915, 15917, 15919, 15921, 15923, 15939,
15941, 15948, 15963, 15966, 15985, 15988, 15997, 16032, 16034, 16036,
16037, 16038, 16041, 16055, 16071, 16072, 16074, 16077, 16078, 16103,
16112, 16143, 16144, 16146, 16150, 16151, 16153, 16167, 16172, 16195,
16214, 16245, 16271, 16274, 16283, 16289.
* The public headers no longer use __unused nor __block. This change is to
support compiling programs that are derived from BSD sources and use

View File

@ -596,9 +596,8 @@ tgamma -0x27.ffffcp0
tgamma -0x28.00004p0
tgamma -0x28.ffffcp0
tgamma -0x29.00004p0
# Bug 6810: errno may not be set on underflow.
tgamma -0x29.ffffcp0 missing-errno
tgamma -0x2a.00004p0 missing-errno
tgamma -0x29.ffffcp0
tgamma -0x2a.00004p0
tgamma 0x8.0000000000008p0
tgamma 0x7.ffffffffffffcp0
tgamma 0x7.0000000000004p0
@ -641,23 +640,22 @@ tgamma -0x27.fffffffffffep0
tgamma -0x28.000000000002p0
tgamma -0x28.fffffffffffep0
tgamma -0x29.000000000002p0
# Bug 6810: errno may not be set on underflow.
tgamma -0x29.fffffffffffep0 missing-errno
tgamma -0x2a.000000000002p0 missing-errno
tgamma -0x31.fffffffffffep0 missing-errno
tgamma -0x32.000000000002p0 missing-errno
tgamma -0x63.fffffffffffcp0 missing-errno
tgamma -0x64.000000000004p0 missing-errno
tgamma -0x95.fffffffffff8p0 missing-errno
tgamma -0x96.000000000008p0 missing-errno
tgamma -0xb4.fffffffffff8p0 missing-errno
tgamma -0xb5.000000000008p0 missing-errno
tgamma -0xb5.fffffffffff8p0 missing-errno
tgamma -0xb6.000000000008p0 missing-errno
tgamma -0xb6.fffffffffff8p0 missing-errno
tgamma -0xb7.000000000008p0 missing-errno
tgamma -0xb7.fffffffffff8p0 missing-errno
tgamma -0xb8.000000000008p0 missing-errno
tgamma -0x29.fffffffffffep0
tgamma -0x2a.000000000002p0
tgamma -0x31.fffffffffffep0
tgamma -0x32.000000000002p0
tgamma -0x63.fffffffffffcp0
tgamma -0x64.000000000004p0
tgamma -0x95.fffffffffff8p0
tgamma -0x96.000000000008p0
tgamma -0xb4.fffffffffff8p0
tgamma -0xb5.000000000008p0
tgamma -0xb5.fffffffffff8p0
tgamma -0xb6.000000000008p0
tgamma -0xb6.fffffffffff8p0
tgamma -0xb7.000000000008p0
tgamma -0xb7.fffffffffff8p0
tgamma -0xb8.000000000008p0
tgamma 0x8.00000000000000000000000004p0
tgamma 0x7.fffffffffffffffffffffffffep0
tgamma 0x7.00000000000000000000000002p0
@ -700,31 +698,30 @@ tgamma -0x27.fffffffffffffffffffffffffp0
tgamma -0x28.0000000000000000000000001p0
tgamma -0x28.fffffffffffffffffffffffffp0
tgamma -0x29.0000000000000000000000001p0
# Bug 6810: errno may not be set on underflow.
tgamma -0x29.fffffffffffffffffffffffffp0 missing-errno
tgamma -0x2a.0000000000000000000000001p0 missing-errno
tgamma -0x31.fffffffffffffffffffffffffp0 missing-errno
tgamma -0x32.0000000000000000000000001p0 missing-errno
tgamma -0x63.ffffffffffffffffffffffffep0 missing-errno
tgamma -0x64.0000000000000000000000002p0 missing-errno
tgamma -0x95.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0x96.0000000000000000000000004p0 missing-errno
tgamma -0xb4.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xb5.0000000000000000000000004p0 missing-errno
tgamma -0xb5.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xb6.0000000000000000000000004p0 missing-errno
tgamma -0xb6.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xb7.0000000000000000000000004p0 missing-errno
tgamma -0xb7.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xb8.0000000000000000000000004p0 missing-errno
tgamma -0xbb.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xbc.0000000000000000000000004p0 missing-errno
tgamma -0xbc.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xbd.0000000000000000000000004p0 missing-errno
tgamma -0xbd.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xbe.0000000000000000000000004p0 missing-errno
tgamma -0xbe.ffffffffffffffffffffffffcp0 missing-errno
tgamma -0xbf.0000000000000000000000004p0 missing-errno
tgamma -0x29.fffffffffffffffffffffffffp0
tgamma -0x2a.0000000000000000000000001p0
tgamma -0x31.fffffffffffffffffffffffffp0
tgamma -0x32.0000000000000000000000001p0
tgamma -0x63.ffffffffffffffffffffffffep0
tgamma -0x64.0000000000000000000000002p0
tgamma -0x95.ffffffffffffffffffffffffcp0
tgamma -0x96.0000000000000000000000004p0
tgamma -0xb4.ffffffffffffffffffffffffcp0
tgamma -0xb5.0000000000000000000000004p0
tgamma -0xb5.ffffffffffffffffffffffffcp0
tgamma -0xb6.0000000000000000000000004p0
tgamma -0xb6.ffffffffffffffffffffffffcp0
tgamma -0xb7.0000000000000000000000004p0
tgamma -0xb7.ffffffffffffffffffffffffcp0
tgamma -0xb8.0000000000000000000000004p0
tgamma -0xbb.ffffffffffffffffffffffffcp0
tgamma -0xbc.0000000000000000000000004p0
tgamma -0xbc.ffffffffffffffffffffffffcp0
tgamma -0xbd.0000000000000000000000004p0
tgamma -0xbd.ffffffffffffffffffffffffcp0
tgamma -0xbe.0000000000000000000000004p0
tgamma -0xbe.ffffffffffffffffffffffffcp0
tgamma -0xbf.0000000000000000000000004p0
tgamma 0x8.000000000000001p0
tgamma 0x7.fffffffffffffff8p0
tgamma 0x7.0000000000000008p0
@ -767,53 +764,52 @@ tgamma -0x27.ffffffffffffffcp0
tgamma -0x28.000000000000004p0
tgamma -0x28.ffffffffffffffcp0
tgamma -0x29.000000000000004p0
# Bug 6810: errno may not be set on underflow.
tgamma -0x29.ffffffffffffffcp0 missing-errno
tgamma -0x2a.000000000000004p0 missing-errno
tgamma -0x31.ffffffffffffffcp0 missing-errno
tgamma -0x32.000000000000004p0 missing-errno
tgamma -0x63.ffffffffffffff8p0 missing-errno
tgamma -0x64.000000000000008p0 missing-errno
tgamma -0x95.ffffffffffffffp0 missing-errno
tgamma -0x96.00000000000001p0 missing-errno
tgamma -0xb4.ffffffffffffffp0 missing-errno
tgamma -0xb5.00000000000001p0 missing-errno
tgamma -0xb5.ffffffffffffffp0 missing-errno
tgamma -0xb6.00000000000001p0 missing-errno
tgamma -0xb6.ffffffffffffffp0 missing-errno
tgamma -0xb7.00000000000001p0 missing-errno
tgamma -0xb7.ffffffffffffffp0 missing-errno
tgamma -0xb8.00000000000001p0 missing-errno
tgamma -0xbb.ffffffffffffffp0 missing-errno
tgamma -0xbc.00000000000001p0 missing-errno
tgamma -0xbc.ffffffffffffffp0 missing-errno
tgamma -0xbd.00000000000001p0 missing-errno
tgamma -0xbd.ffffffffffffffp0 missing-errno
tgamma -0xbe.00000000000001p0 missing-errno
tgamma -0xbe.ffffffffffffffp0 missing-errno
tgamma -0xbf.00000000000001p0 missing-errno
tgamma -0xf9.ffffffffffffffp0 missing-errno
tgamma -0xfa.00000000000001p0 missing-errno
tgamma -0x1f3.fffffffffffffep0 missing-errno
tgamma -0x1f4.00000000000002p0 missing-errno
tgamma -0x2ed.fffffffffffffcp0 missing-errno
tgamma -0x2ee.00000000000004p0 missing-errno
tgamma -0x3e7.fffffffffffffcp0 missing-errno
tgamma -0x3e8.00000000000004p0 missing-errno
tgamma -0x4e1.fffffffffffff8p0 missing-errno
tgamma -0x4e2.00000000000008p0 missing-errno
tgamma -0x5db.fffffffffffff8p0 missing-errno
tgamma -0x5dc.00000000000008p0 missing-errno
tgamma -0x6d5.fffffffffffff8p0 missing-errno
tgamma -0x6d6.00000000000008p0 missing-errno
tgamma -0x6e2.fffffffffffff8p0 missing-errno
tgamma -0x6e3.00000000000008p0 missing-errno
tgamma -0x6e3.fffffffffffff8p0 missing-errno
tgamma -0x6e4.00000000000008p0 missing-errno
tgamma -0x6e4.fffffffffffff8p0 missing-errno
tgamma -0x6e5.00000000000008p0 missing-errno
tgamma -0x6e5.fffffffffffff8p0 missing-errno
tgamma -0x6e6.00000000000008p0 missing-errno
tgamma -0x29.ffffffffffffffcp0
tgamma -0x2a.000000000000004p0
tgamma -0x31.ffffffffffffffcp0
tgamma -0x32.000000000000004p0
tgamma -0x63.ffffffffffffff8p0
tgamma -0x64.000000000000008p0
tgamma -0x95.ffffffffffffffp0
tgamma -0x96.00000000000001p0
tgamma -0xb4.ffffffffffffffp0
tgamma -0xb5.00000000000001p0
tgamma -0xb5.ffffffffffffffp0
tgamma -0xb6.00000000000001p0
tgamma -0xb6.ffffffffffffffp0
tgamma -0xb7.00000000000001p0
tgamma -0xb7.ffffffffffffffp0
tgamma -0xb8.00000000000001p0
tgamma -0xbb.ffffffffffffffp0
tgamma -0xbc.00000000000001p0
tgamma -0xbc.ffffffffffffffp0
tgamma -0xbd.00000000000001p0
tgamma -0xbd.ffffffffffffffp0
tgamma -0xbe.00000000000001p0
tgamma -0xbe.ffffffffffffffp0
tgamma -0xbf.00000000000001p0
tgamma -0xf9.ffffffffffffffp0
tgamma -0xfa.00000000000001p0
tgamma -0x1f3.fffffffffffffep0
tgamma -0x1f4.00000000000002p0
tgamma -0x2ed.fffffffffffffcp0
tgamma -0x2ee.00000000000004p0
tgamma -0x3e7.fffffffffffffcp0
tgamma -0x3e8.00000000000004p0
tgamma -0x4e1.fffffffffffff8p0
tgamma -0x4e2.00000000000008p0
tgamma -0x5db.fffffffffffff8p0
tgamma -0x5dc.00000000000008p0
tgamma -0x6d5.fffffffffffff8p0
tgamma -0x6d6.00000000000008p0
tgamma -0x6e2.fffffffffffff8p0
tgamma -0x6e3.00000000000008p0
tgamma -0x6e3.fffffffffffff8p0
tgamma -0x6e4.00000000000008p0
tgamma -0x6e4.fffffffffffff8p0
tgamma -0x6e5.00000000000008p0
tgamma -0x6e5.fffffffffffff8p0
tgamma -0x6e6.00000000000008p0
tgamma 0x8.0000000000000000000000000008p0
tgamma 0x7.fffffffffffffffffffffffffffcp0
tgamma 0x7.0000000000000000000000000004p0
@ -856,64 +852,62 @@ tgamma -0x27.ffffffffffffffffffffffffffep0
tgamma -0x28.000000000000000000000000002p0
tgamma -0x28.ffffffffffffffffffffffffffep0
tgamma -0x29.000000000000000000000000002p0
# Bug 6810: errno may not be set on underflow.
tgamma -0x29.ffffffffffffffffffffffffffep0 missing-errno
tgamma -0x2a.000000000000000000000000002p0 missing-errno
tgamma -0x31.ffffffffffffffffffffffffffep0 missing-errno
tgamma -0x32.000000000000000000000000002p0 missing-errno
tgamma -0x63.ffffffffffffffffffffffffffcp0 missing-errno
tgamma -0x64.000000000000000000000000004p0 missing-errno
tgamma -0x95.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0x96.000000000000000000000000008p0 missing-errno
tgamma -0xb4.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xb5.000000000000000000000000008p0 missing-errno
tgamma -0xb5.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xb6.000000000000000000000000008p0 missing-errno
tgamma -0xb6.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xb7.000000000000000000000000008p0 missing-errno
tgamma -0xb7.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xb8.000000000000000000000000008p0 missing-errno
tgamma -0xbb.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xbc.000000000000000000000000008p0 missing-errno
tgamma -0xbc.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xbd.000000000000000000000000008p0 missing-errno
tgamma -0xbd.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xbe.000000000000000000000000008p0 missing-errno
tgamma -0xbe.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xbf.000000000000000000000000008p0 missing-errno
tgamma -0xf9.ffffffffffffffffffffffffff8p0 missing-errno
tgamma -0xfa.000000000000000000000000008p0 missing-errno
tgamma -0x1f3.ffffffffffffffffffffffffffp0 missing-errno
tgamma -0x1f4.00000000000000000000000001p0 missing-errno
tgamma -0x2ed.fffffffffffffffffffffffffep0 missing-errno
tgamma -0x2ee.00000000000000000000000002p0 missing-errno
tgamma -0x3e7.fffffffffffffffffffffffffep0 missing-errno
tgamma -0x3e8.00000000000000000000000002p0 missing-errno
tgamma -0x4e1.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x4e2.00000000000000000000000004p0 missing-errno
tgamma -0x5db.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x5dc.00000000000000000000000004p0 missing-errno
tgamma -0x6d5.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6d6.00000000000000000000000004p0 missing-errno
tgamma -0x6e2.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6e3.00000000000000000000000004p0 missing-errno
tgamma -0x6e3.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6e4.00000000000000000000000004p0 missing-errno
tgamma -0x6e4.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6e5.00000000000000000000000004p0 missing-errno
tgamma -0x6e5.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6e6.00000000000000000000000004p0 missing-errno
tgamma -0x6eb.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6ec.00000000000000000000000004p0 missing-errno
tgamma -0x6ec.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6ed.00000000000000000000000004p0 missing-errno
tgamma -0x6ed.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6ee.00000000000000000000000004p0 missing-errno
tgamma -0x6ee.fffffffffffffffffffffffffcp0 missing-errno
tgamma -0x6ef.00000000000000000000000004p0 missing-errno
tgamma -0x29.ffffffffffffffffffffffffffep0
tgamma -0x2a.000000000000000000000000002p0
tgamma -0x31.ffffffffffffffffffffffffffep0
tgamma -0x32.000000000000000000000000002p0
tgamma -0x63.ffffffffffffffffffffffffffcp0
tgamma -0x64.000000000000000000000000004p0
tgamma -0x95.ffffffffffffffffffffffffff8p0
tgamma -0x96.000000000000000000000000008p0
tgamma -0xb4.ffffffffffffffffffffffffff8p0
tgamma -0xb5.000000000000000000000000008p0
tgamma -0xb5.ffffffffffffffffffffffffff8p0
tgamma -0xb6.000000000000000000000000008p0
tgamma -0xb6.ffffffffffffffffffffffffff8p0
tgamma -0xb7.000000000000000000000000008p0
tgamma -0xb7.ffffffffffffffffffffffffff8p0
tgamma -0xb8.000000000000000000000000008p0
tgamma -0xbb.ffffffffffffffffffffffffff8p0
tgamma -0xbc.000000000000000000000000008p0
tgamma -0xbc.ffffffffffffffffffffffffff8p0
tgamma -0xbd.000000000000000000000000008p0
tgamma -0xbd.ffffffffffffffffffffffffff8p0
tgamma -0xbe.000000000000000000000000008p0
tgamma -0xbe.ffffffffffffffffffffffffff8p0
tgamma -0xbf.000000000000000000000000008p0
tgamma -0xf9.ffffffffffffffffffffffffff8p0
tgamma -0xfa.000000000000000000000000008p0
tgamma -0x1f3.ffffffffffffffffffffffffffp0
tgamma -0x1f4.00000000000000000000000001p0
tgamma -0x2ed.fffffffffffffffffffffffffep0
tgamma -0x2ee.00000000000000000000000002p0
tgamma -0x3e7.fffffffffffffffffffffffffep0
tgamma -0x3e8.00000000000000000000000002p0
tgamma -0x4e1.fffffffffffffffffffffffffcp0
tgamma -0x4e2.00000000000000000000000004p0
tgamma -0x5db.fffffffffffffffffffffffffcp0
tgamma -0x5dc.00000000000000000000000004p0
tgamma -0x6d5.fffffffffffffffffffffffffcp0
tgamma -0x6d6.00000000000000000000000004p0
tgamma -0x6e2.fffffffffffffffffffffffffcp0
tgamma -0x6e3.00000000000000000000000004p0
tgamma -0x6e3.fffffffffffffffffffffffffcp0
tgamma -0x6e4.00000000000000000000000004p0
tgamma -0x6e4.fffffffffffffffffffffffffcp0
tgamma -0x6e5.00000000000000000000000004p0
tgamma -0x6e5.fffffffffffffffffffffffffcp0
tgamma -0x6e6.00000000000000000000000004p0
tgamma -0x6eb.fffffffffffffffffffffffffcp0
tgamma -0x6ec.00000000000000000000000004p0
tgamma -0x6ec.fffffffffffffffffffffffffcp0
tgamma -0x6ed.00000000000000000000000004p0
tgamma -0x6ed.fffffffffffffffffffffffffcp0
tgamma -0x6ee.00000000000000000000000004p0
tgamma -0x6ee.fffffffffffffffffffffffffcp0
tgamma -0x6ef.00000000000000000000000004p0
tgamma -0x1.0a32a2p+5
# Bug 6810: errno may not be set on underflow.
tgamma -0x1.5800000080001p+7 missing-errno
tgamma -0x1.5800000080001p+7
tgamma 18.5
tgamma 19.5
tgamma 23.5
@ -933,6 +927,8 @@ tgamma 0x6.db8c603359a97108p+8
tgamma 0x6.db8c603359a9711p+8
tgamma 0x6.db8c603359a971081bc4a2e9dfdp+8
tgamma 0x6.db8c603359a971081bc4a2e9dfd4p+8
tgamma 1e3
tgamma -100000.5
y0 0.125
y0 0.75

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,7 @@
* depending on the library mode.
*/
#include <errno.h>
#include <math.h>
#include <math_private.h>
@ -24,13 +25,15 @@ __tgamma(double x)
int local_signgam;
double y = __ieee754_gamma_r(x,&local_signgam);
if(__builtin_expect(!__finite(y), 0)
if(__glibc_unlikely (!__finite (y) || y == 0)
&& (__finite (x) || __isinf (x) < 0)
&& _LIB_VERSION != _IEEE_) {
if (x == 0.0)
return __kernel_standard(x,x,50); /* tgamma pole */
else if(__floor(x)==x&&x<0.0)
return __kernel_standard(x,x,41); /* tgamma domain */
else if (y == 0)
__set_errno (ERANGE); /* tgamma underflow */
else
return __kernel_standard(x,x,40); /* tgamma overflow */
}

View File

@ -13,6 +13,7 @@
* ====================================================
*/
#include <errno.h>
#include <math.h>
#include <math_private.h>
@ -22,7 +23,7 @@ __tgammaf(float x)
int local_signgam;
float y = __ieee754_gammaf_r(x,&local_signgam);
if(__builtin_expect(!__finitef(y), 0)
if(__glibc_unlikely (!__finitef (y) || y == 0)
&& (__finitef (x) || __isinff (x) < 0)
&& _LIB_VERSION != _IEEE_) {
if (x == (float)0.0)
@ -31,6 +32,9 @@ __tgammaf(float x)
else if(__floorf(x)==x&&x<0.0f)
/* tgammaf domain */
return __kernel_standard_f(x, x, 141);
else if (y == 0)
/* tgammaf underflow */
__set_errno (ERANGE);
else
/* tgammaf overflow */
return __kernel_standard_f(x, x, 140);

View File

@ -18,6 +18,7 @@
* Return the Gamma function of x.
*/
#include <errno.h>
#include <math.h>
#include <math_private.h>
@ -27,13 +28,15 @@ __tgammal(long double x)
int local_signgam;
long double y = __ieee754_gammal_r(x,&local_signgam);
if(__builtin_expect(!__finitel(y), 0)
if(__glibc_unlikely (!__finitel (y) || y == 0)
&& (__finitel (x) || __isinfl (x) < 0)
&& _LIB_VERSION != _IEEE_) {
if(x==0.0)
return __kernel_standard_l(x,x,250); /* tgamma pole */
else if(__floorl(x)==x&&x<0.0L)
return __kernel_standard_l(x,x,241); /* tgamma domain */
else if (y == 0)
__set_errno (ERANGE); /* tgamma underflow */
else
return __kernel_standard_l(x,x,240); /* tgamma overflow */
}

View File

@ -8986,6 +8986,9 @@ ldouble: 1
Test "tgamma (0x3.8p+0)":
float: 1
ifloat: 1
Test "tgamma (0x3.e8p+8)":
ildouble: 1
ldouble: 1
Test "tgamma (0x3.fffffcp+0)":
float: 1
ifloat: 1

View File

@ -10038,6 +10038,9 @@ ldouble: 1
Test "tgamma (0x3.8p+0)":
float: 2
ifloat: 2
Test "tgamma (0x3.e8p+8)":
ildouble: 1
ldouble: 1
Test "tgamma (0x3.fffffcp+0)":
float: 1
ifloat: 1