Subversion Repositories shark

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 pj 1
 
2
 
3
/* @(#)w_pow.c 5.2 93/10/01 */
4
/*
5
 * ====================================================
6
 * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
7
 *
8
 * Developed at SunPro, a Sun Microsystems, Inc. business.
9
 * Permission to use, copy, modify, and distribute this
10
 * software is freely granted, provided that this notice
11
 * is preserved.
12
 * ====================================================
13
 */
14
 
15
/*
16
 * wrapper pow(x,y) return x**y
17
 */
18
 
19
#include "math.h"
20
#include "math_private.h"
21
 
22
 
23
#ifdef __STDC__
24
        double pow(double x, double y)  /* wrapper pow */
25
#else
26
        double pow(x,y)                 /* wrapper pow */
27
        double x,y;
28
#endif
29
{
30
#ifdef _IEEE_LIBM
31
        return  __ieee754_pow(x,y);
32
#else
33
        double z;
34
        z=__ieee754_pow(x,y);
35
        if(_LIB_VERSION == _IEEE_|| isnan(y)) return z;
36
        if(isnan(x)) {
37
            if(y==0.0)
38
                return __kernel_standard(x,y,42); /* pow(NaN,0.0) */
39
            else
40
                return z;
41
        }
42
        if(x==0.0){
43
            if(y==0.0)
44
                return __kernel_standard(x,y,20); /* pow(0.0,0.0) */
45
            if(finite(y)&&y<0.0)
46
                return __kernel_standard(x,y,23); /* pow(0.0,negative) */
47
            return z;
48
        }
49
        if(!finite(z)) {
50
            if(finite(x)&&finite(y)) {
51
                if(isnan(z))
52
                    return __kernel_standard(x,y,24); /* pow neg**non-int */
53
                else
54
                    return __kernel_standard(x,y,21); /* pow overflow */
55
            }
56
        }
57
        if(z==0.0&&finite(x)&&finite(y))
58
            return __kernel_standard(x,y,22); /* pow underflow */
59
        return z;
60
#endif
61
}