This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
| Author | mark.dickinson |
|---|---|
| Recipients | Rhamphoryncus, christian.heimes, gmcastil, gvanrossum, mark.dickinson, tim.peters |
| Date | 2008年01月21日.15:25:00 |
| SpamBayes Score | 0.006707837 |
| Marked as misclassified | No |
| Message-id | <1200929103.24.0.177485914176.issue1640@psf.upfronthosting.co.za> |
| In-reply-to |
| Content | |
|---|---|
Okay: here's an attempted guess at what's happening on Windows:
Near the end of c_atanh, there's a line that reads:
r.real = log1p(4.*z.real/((1-z.real)*(1-z.real) + ay*ay))/4.;
Somehow, when z.real is 0.99999999999999989 and ay is 0, the argument to log1p is ending up one-quarter of the size that it should be. I
suspect that the 1-z.real calculation is producing, for reasons that are beyond me, the float 2**-52 instead of the correct value of 2**-
53.
Christian: if you have any time to play with this, could you try replacing this line with something like:
double temp = 1-z.real
printf("z.real is %.19e\n", z.real);
r.real = log1p(4.*z.real/(temp*temp + ay*ay))/4.;
and see if either the problem goes away or if you can confirm that temp is coming out to be 2.2204460492503131e-16 rather than 1.1102230246251565e-16. |
|
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2008年01月21日 15:25:03 | mark.dickinson | set | spambayes_score: 0.00670784 -> 0.006707837 recipients: + mark.dickinson, gvanrossum, tim.peters, Rhamphoryncus, christian.heimes, gmcastil |
| 2008年01月21日 15:25:03 | mark.dickinson | set | spambayes_score: 0.00670784 -> 0.00670784 messageid: <1200929103.24.0.177485914176.issue1640@psf.upfronthosting.co.za> |
| 2008年01月21日 15:25:01 | mark.dickinson | link | issue1640 messages |
| 2008年01月21日 15:25:00 | mark.dickinson | create | |