mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-03 18:31:04 +00:00
694aabefd2
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.
46 lines
1.1 KiB
C
46 lines
1.1 KiB
C
/* e_hypotf.c -- float version of e_hypot.c.
|
|
* Conversion to float by Ian Lance Taylor, Cygnus Support, ian@cygnus.com.
|
|
*/
|
|
|
|
/*
|
|
* ====================================================
|
|
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
|
|
*
|
|
* Developed at SunPro, a Sun Microsystems, Inc. business.
|
|
* Permission to use, copy, modify, and distribute this
|
|
* software is freely granted, provided that this notice
|
|
* is preserved.
|
|
* ====================================================
|
|
*/
|
|
|
|
#include <math.h>
|
|
#include <math_private.h>
|
|
|
|
float
|
|
__ieee754_hypotf(float x, float y)
|
|
{
|
|
double d_x, d_y;
|
|
int32_t ha, hb;
|
|
|
|
GET_FLOAT_WORD(ha,x);
|
|
ha &= 0x7fffffff;
|
|
GET_FLOAT_WORD(hb,y);
|
|
hb &= 0x7fffffff;
|
|
if (ha == 0x7f800000)
|
|
return fabsf(x);
|
|
else if (hb == 0x7f800000)
|
|
return fabsf(y);
|
|
else if (ha > 0x7f800000 || hb > 0x7f800000)
|
|
return fabsf(x) * fabsf(y);
|
|
else if (ha == 0)
|
|
return fabsf(y);
|
|
else if (hb == 0)
|
|
return fabsf(x);
|
|
|
|
d_x = (double) x;
|
|
d_y = (double) y;
|
|
|
|
return (float) __ieee754_sqrt(d_x * d_x + d_y * d_y);
|
|
}
|
|
strong_alias (__ieee754_hypotf, __hypotf_finite)
|