1 /* Implement __kernel_standard_l.
2 Copyright (C) 2012-2017 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_private.h>
35 #include <math-svid-compat.h>
43 static double zero
= 0.0;
45 /* Handle errors for a libm function as specified by TYPE (see
46 comments in k_standard.c for details), with arguments X and Y,
47 returning the appropriate return value for that function. */
50 __kernel_standard_l (long double x
, long double y
, int type
)
66 /* powl (x, y) overflow. */
70 exc
.name
= (char *) "powl";
71 if (_LIB_VERSION
== _SVID_
)
75 if (x
< zero
&& __rintl (y
) != y
)
80 exc
.retval
= HUGE_VAL
;
82 if (x
< zero
&& __rintl (y
) != y
)
83 exc
.retval
= -HUGE_VAL
;
85 if (_LIB_VERSION
== _POSIX_
)
87 else if (!matherr (&exc
))
92 /* powl (x, y) underflow. */
96 exc
.name
= (char *) "powl";
99 if (x
< zero
&& __rintl (y
) != y
)
101 if (_LIB_VERSION
== _POSIX_
)
102 __set_errno (ERANGE
);
103 else if (!matherr (&exc
))
104 __set_errno (ERANGE
);
108 return __kernel_standard (dx
, dy
, type
);