| 21 Oct 2002 | |
| bug fix in e_pow.c from "David G Hough at validlab.com" <validlab@validlab.com>. | |
| credit for bug report goes to andrew_johnson@uk.ibm.com | |
| test example: | |
| ----------------------------- | |
| static int fail=0; | |
| trypow(x,y,z) | |
| double x,y,z; | |
| { | |
| extern double ieee_pow(); | |
| double p ; | |
| p = ieee_pow(x,y); | |
| if (p != z) { | |
| printf(" pow failure x %e y %e computed %e correct %e \n",x,y,p,z); | |
| fail++; | |
| return; | |
| } | |
| if (1/p != 1/z) { | |
| printf(" pow failure x %e y %e computed %e correct %e \n",x,y,p,z); | |
| fail++; | |
| return; | |
| } | |
| } | |
| main() | |
| { | |
| trypow( 1.0000000001, 1.0000000001E10, 2.7182820535066154); | |
| trypow(-1.0000000001, 1.0000000001E10, -2.7182820535066154); | |
| trypow(-0.001, 1.0000000001E10, -0.0); | |
| trypow(-1000.0, 1.0000000001E10, -1.0/0.0); | |
| if (fail == 0) { | |
| printf(" fdlibm e_pow.c seems to be current \n"); | |
| exit(0); | |
| } | |
| else { | |
| printf(" fdlibm e_pow.c seems to be out of date \n"); | |
| exit(1); | |
| } | |
| } | |
| ----------------------------- | |
| What's new in FDLIBM 5.3? | |
| CONFIGURE | |
| To build FDLIBM, edit the supplied Makefile or create | |
| a local Makefile by running "sh configure" | |
| using the supplied configure script contributed by Nelson Beebe | |
| BUGS FIXED | |
| 1. e_pow.c incorrect results when | |
| x is very close to -1.0 and y is very large, e.g. | |
| ieee_pow(-1.0000000000000002e+00,4.5035996273704970e+15) = 0 | |
| ieee_pow(-9.9999999999999978e-01,4.5035996273704970e+15) = 0 | |
| Correct results are close to -e and -1/e. | |
| 2. k_tan.c error was > 1 ulp target for FDLIBM | |
| 5.2: Worst error at least 1.45 ulp at | |
| ieee_tan(1.7765241907548024E+269) = 1.7733884462610958E+16 | |
| 5.3: Worst error 0.96 ulp | |
| NOT FIXED YET | |
| 3. Compiler failure on non-standard code | |
| Statements like | |
| *(1+(int*)&t1) = 0; | |
| are not standard C and cause some optimizing compilers (e.g. GCC) | |
| to generate bad code under optimization. These cases | |
| are to be addressed in the next release. | |