1
/* w_powl.c -- long double version of w_pow.c.
2
* Conversion to long double by Ulrich Drepper,
3
* Cygnus Support, drepper@cygnus.com.
7
* ====================================================
8
* Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
10
* Developed at SunPro, a Sun Microsystems, Inc. business.
11
* Permission to use, copy, modify, and distribute this
12
* software is freely granted, provided that this notice
14
* ====================================================
18
* wrapper powl(x,y) return x**y
1
/* Copyright (C) 2011 Free Software Foundation, Inc.
2
This file is part of the GNU C Library.
3
Contributed by Ulrich Drepper <drepper@gmail.com>, 2011.
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, write to the Free
17
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
22
#include "math_private.h"
26
long double __powl(long double x, long double y)/* wrapper powl */
28
long double __powl(x,y) /* wrapper powl */
21
#include <math_private.h>
26
__powl (long double x, long double y)
33
return __ieee754_powl(x,y);
36
z=__ieee754_powl(x,y);
37
if(_LIB_VERSION == _IEEE_|| __isnanl(y)) return z;
40
return __kernel_standard(x,y,242); /* pow(NaN,0.0) */
46
return __kernel_standard(x,y,220); /* pow(0.0,0.0) */
47
if(__finitel(y)&&y<0.0) {
48
if (signbit (x) && signbit (z))
49
return __kernel_standard(x,y,223); /* pow(-0.0,negative) */
28
long double z = __ieee754_powl (x, y);
29
if (__builtin_expect (!__finitel (z), 0))
31
if (_LIB_VERSION != _IEEE_)
37
return __kernel_standard (x, y, 242);
39
else if (__finitel (x) && __finitel (y))
42
/* pow neg**non-int */
43
return __kernel_standard (x, y, 224);
44
else if (x == 0.0L && y < 0.0L)
46
if (signbit (x) && signbit (z))
47
/* pow(-0.0,negative) */
48
return __kernel_standard (x, y, 223);
50
/* pow(+0.0,negative) */
51
return __kernel_standard (x, y, 243);
51
return __kernel_standard(x,y,243); /* pow(+0.0,negative) */
56
if(__finitel(x)&&__finitel(y)) {
58
return __kernel_standard(x,y,224); /* pow neg**non-int */
60
return __kernel_standard(x,y,221); /* pow overflow */
63
if(z==0.0&&__finitel(x)&&__finitel(y))
64
return __kernel_standard(x,y,222); /* pow underflow */
55
return __kernel_standard (x, y, 221);
59
else if (__builtin_expect (z == 0.0L, 0) && __finitel (x) && __finitel (y)
60
&& _LIB_VERSION != _IEEE_)
66
return __kernel_standard (x, y, 220);
70
return __kernel_standard (x, y, 222);
68
75
weak_alias (__powl, powl)