This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi!
On Thu, 04 Apr 2013 09:38:58 +0200, Andreas Jaeger <aj@suse.com> wrote:
> On Wednesday, April 03, 2013 22:03:31 Thomas Schwinge wrote:
> > @@ -139,7 +141,7 @@ __ieee754_pow(double x, double y) {
> > }
> > else if (qx == 0x7ff00000)
> > return y < 0 ? 0.0 : INF.x;
> > - return NaNQ.x; /* y not integer and x<0 */
> > + return (x - x) / (x - x); /* y not integer and x<0 */
>
> I'm not convinced of this change, the rest is fine.
>
> The above raises an invalid exception - but the previous code did not.
> Why is this change still fine?
If my code and specification reading is correct, then this is a bug in
the original code, for IEEE 754-2008 says: Âpow (x, y) signals the
invalid operation exception for finite x < 0 and finite non-integer yÂ,
and/but this didn't matter in practice, as the wrapper code in
math/w_pow.c:__pow would catch this case and handle it separately via
sysdeps/ieee754/k_standard.c:__kernel_standard, case 24, raising an
INVALID exception on its own. Can you confirm my reasoning?
We could be adding the respective tests to libm-tests with
<http://news.gmane.org/find-root.php?message_id=%3C871uaqzheb.fsf%40schwinge.name%3E>
(or something similar) in place.
GrÃÃe,
Thomas
Attachment:
pgpg_pWDI41MR.pgp
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |