Simplify hypotf infinity handling (bug 15918).

Bug 15918 points out that the handling of infinities in hypotf can be
simplified: it's enough to return the absolute value of the infinite
argument without first comparing it to the other argument and possibly
returning that other argument's absolute value.  This patch makes that
cleanup (which should not change how hypotf behaves on any input).

Tested for x86_64.

	[BZ #15918]
	* sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Simplify
	handling of cases where one argument is an infinity.
This commit is contained in:
Joseph Myers 2015-09-15 17:24:23 +00:00
parent 828bf6828b
commit 694aabefd2
3 changed files with 12 additions and 16 deletions

View File

@ -1,5 +1,9 @@
2015-09-15 Joseph Myers <joseph@codesourcery.com>
[BZ #15918]
* sysdeps/ieee754/flt-32/e_hypotf.c (__ieee754_hypotf): Simplify
handling of cases where one argument is an infinity.
[BZ #18875]
[BZ #18966]
* sysdeps/i386/fpu/e_exp10.S (dbl_min): New object.

12
NEWS
View File

@ -9,12 +9,12 @@ Version 2.23
* The following bugs are resolved with this release:
2542, 2543, 2558, 2898, 14341, 14912, 15786, 16141, 16517, 16519, 16520,
16521, 16734, 16973, 16985, 17787, 17905, 18084, 18086, 18240, 18265,
18370, 18421, 18480, 18525, 18610, 18618, 18647, 18661, 18674, 18675,
18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796, 18820,
18823, 18824, 18863, 18870, 18873, 18875, 18887, 18921, 18952, 18961,
18966.
2542, 2543, 2558, 2898, 14341, 14912, 15786, 15918, 16141, 16517, 16519,
16520, 16521, 16734, 16973, 16985, 17787, 17905, 18084, 18086, 18240,
18265, 18370, 18421, 18480, 18525, 18610, 18618, 18647, 18661, 18674,
18675, 18681, 18757, 18778, 18781, 18787, 18789, 18790, 18795, 18796,
18820, 18823, 18824, 18863, 18870, 18873, 18875, 18887, 18921, 18952,
18961, 18966.
* The obsolete header <regexp.h> has been removed. Programs that require
this header must be updated to use <regex.h> instead.

View File

@ -27,17 +27,9 @@ __ieee754_hypotf(float x, float y)
GET_FLOAT_WORD(hb,y);
hb &= 0x7fffffff;
if (ha == 0x7f800000)
{
if (x == y)
return fabsf(y);
return fabsf(x);
}
return fabsf(x);
else if (hb == 0x7f800000)
{
if (x == y)
return fabsf(x);
return fabsf(y);
}
return fabsf(y);
else if (ha > 0x7f800000 || hb > 0x7f800000)
return fabsf(x) * fabsf(y);
else if (ha == 0)