Commit | Line | Data |
---|---|---|
81bcf8af | 1 | /* @(#)pow.c 4.2 %G% */ |
a83d2d10 SL |
2 | |
3 | /* | |
4 | computes a^b. | |
5 | uses log and exp | |
6 | */ | |
7 | ||
8 | #include <errno.h> | |
9 | int errno; | |
10 | double log(), exp(); | |
11 | ||
12 | double | |
13 | pow(arg1,arg2) | |
14 | double arg1, arg2; | |
15 | { | |
16 | double temp; | |
17 | long l; | |
18 | ||
81bcf8af | 19 | #ifdef vax |
a83d2d10 | 20 | asm(" bispsw $0xe0"); |
81bcf8af | 21 | #endif |
a83d2d10 SL |
22 | if(arg1 <= 0.) { |
23 | if(arg1 == 0.) { | |
24 | if(arg2 <= 0.) | |
25 | goto domain; | |
26 | return(0.); | |
27 | } | |
28 | l = arg2; | |
29 | if(l != arg2) | |
30 | goto domain; | |
31 | temp = exp(arg2 * log(-arg1)); | |
32 | if(l & 1) | |
33 | temp = -temp; | |
34 | return(temp); | |
35 | } | |
36 | return(exp(arg2 * log(arg1))); | |
37 | ||
38 | domain: | |
39 | errno = EDOM; | |
40 | return(0.); | |
41 | } |