• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 ieee_pow();
12 double p ;
13 
14 p = ieee_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         ieee_pow(-1.0000000000000002e+00,4.5035996273704970e+15) = 0
61         ieee_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         ieee_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 
78