]>
git.ipfire.org Git - thirdparty/glibc.git/blob - sysdeps/ieee754/k_standardl.c
1 /* Implement __kernel_standard_l.
2 Copyright (C) 2012-2018 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <http://www.gnu.org/licenses/>.
19 Parts based on k_standard.c from fdlibm: */
21 /* @(#)k_standard.c 5.1 93/09/24 */
23 * ====================================================
24 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
26 * Developed at SunPro, a Sun Microsystems, Inc. business.
27 * Permission to use, copy, modify, and distribute this
28 * software is freely granted, provided that this notice
30 * ====================================================
34 #include <math-barriers.h>
35 #include <math_private.h>
36 #include <math-svid-compat.h>
44 static double zero
= 0.0;
46 /* Handle errors for a libm function as specified by TYPE (see
47 comments in k_standard.c for details), with arguments X and Y,
48 returning the appropriate return value for that function. */
51 __kernel_standard_l (long double x
, long double y
, int type
)
67 /* powl (x, y) overflow. */
71 exc
.name
= (char *) "powl";
72 if (_LIB_VERSION
== _SVID_
)
76 if (x
< zero
&& __rintl (y
) != y
)
81 exc
.retval
= HUGE_VAL
;
83 if (x
< zero
&& __rintl (y
) != y
)
84 exc
.retval
= -HUGE_VAL
;
86 if (_LIB_VERSION
== _POSIX_
)
88 else if (!matherr (&exc
))
93 /* powl (x, y) underflow. */
97 exc
.name
= (char *) "powl";
100 if (x
< zero
&& __rintl (y
) != y
)
102 if (_LIB_VERSION
== _POSIX_
)
103 __set_errno (ERANGE
);
104 else if (!matherr (&exc
))
105 __set_errno (ERANGE
);
109 return __kernel_standard (dx
, dy
, type
);