986
|
1 |
21 Oct 2002
|
|
2 |
bug fix in e_pow.c from "David G Hough at validlab.com" <validlab@validlab.com>.
|
|
3 |
credit for bug report goes to andrew_johnson@uk.ibm.com
|
|
4 |
test example:
|
|
5 |
-----------------------------
|
|
6 |
static int fail=0;
|
|
7 |
|
|
8 |
trypow(x,y,z)
|
|
9 |
double x,y,z;
|
|
10 |
{
|
|
11 |
extern double pow();
|
|
12 |
double p ;
|
|
13 |
|
|
14 |
p = pow(x,y);
|
|
15 |
if (p != z) {
|
|
16 |
printf(" pow failure x %e y %e computed %e correct %e \n",x,y,p,z);
|
|
17 |
fail++;
|
|
18 |
return;
|
|
19 |
}
|
|
20 |
if (1/p != 1/z) {
|
|
21 |
printf(" pow failure x %e y %e computed %e correct %e \n",x,y,p,z);
|
|
22 |
fail++;
|
|
23 |
return;
|
|
24 |
}
|
|
25 |
}
|
|
26 |
|
|
27 |
main()
|
|
28 |
{
|
|
29 |
|
|
30 |
trypow( 1.0000000001, 1.0000000001E10, 2.7182820535066154);
|
|
31 |
trypow(-1.0000000001, 1.0000000001E10, -2.7182820535066154);
|
|
32 |
trypow(-0.001, 1.0000000001E10, -0.0);
|
|
33 |
trypow(-1000.0, 1.0000000001E10, -1.0/0.0);
|
|
34 |
|
|
35 |
if (fail == 0) {
|
|
36 |
printf(" fdlibm e_pow.c seems to be current \n");
|
|
37 |
exit(0);
|
|
38 |
}
|
|
39 |
else {
|
|
40 |
printf(" fdlibm e_pow.c seems to be out of date \n");
|
|
41 |
exit(1);
|
|
42 |
}
|
|
43 |
|
|
44 |
}
|
|
45 |
-----------------------------
|
|
46 |
|
|
47 |
|
|
48 |
|
|
49 |
What's new in FDLIBM 5.3?
|
|
50 |
|
|
51 |
CONFIGURE
|
|
52 |
To build FDLIBM, edit the supplied Makefile or create
|
|
53 |
a local Makefile by running "sh configure"
|
|
54 |
using the supplied configure script contributed by Nelson Beebe
|
|
55 |
|
|
56 |
BUGS FIXED
|
|
57 |
|
|
58 |
1. e_pow.c incorrect results when
|
|
59 |
x is very close to -1.0 and y is very large, e.g.
|
|
60 |
pow(-1.0000000000000002e+00,4.5035996273704970e+15) = 0
|
|
61 |
pow(-9.9999999999999978e-01,4.5035996273704970e+15) = 0
|
|
62 |
Correct results are close to -e and -1/e.
|
|
63 |
|
|
64 |
2. k_tan.c error was > 1 ulp target for FDLIBM
|
|
65 |
5.2: Worst error at least 1.45 ulp at
|
|
66 |
tan(1.7765241907548024E+269) = 1.7733884462610958E+16
|
|
67 |
5.3: Worst error 0.96 ulp
|
|
68 |
|
|
69 |
NOT FIXED YET
|
|
70 |
|
|
71 |
3. Compiler failure on non-standard code
|
|
72 |
Statements like
|
|
73 |
*(1+(int*)&t1) = 0;
|
|
74 |
are not standard C and cause some optimizing compilers (e.g. GCC)
|
|
75 |
to generate bad code under optimization. These cases
|
|
76 |
are to be addressed in the next release.
|
|
77 |
|