Current-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: build failure (alpha-current): floating point exception 8
On Mar 3, 7:40pm, plunky%rya-online.net@localhost (Iain Hibbert) wrote:
-- Subject: Re: build failure (alpha-current): floating point exception 8
| On Tue, 3 Mar 2009, Christos Zoulas wrote:
|
| > Does this work?
| >
| > Index: lib.c
| > ===================================================================
| > RCS file: /cvsroot/src/dist/nawk/lib.c,v
| > retrieving revision 1.15
| > diff -u -u -r1.15 lib.c
| > --- lib.c 1 Mar 2009 23:30:52 -0000 1.15
| > +++ lib.c 3 Mar 2009 17:06:02 -0000
| > @@ -706,11 +706,11 @@
| > #include <math.h>
| > int is_number(const char *s)
| > {
| > - double r;
| > + double r, hv = HUGE_VAL;
| > char *ep;
| > errno = 0;
| > r = strtod(s, &ep);
| > - if (ep == s || r == HUGE_VAL || errno == ERANGE)
| > + if (ep == s || memcmp(&r, &hv, sizeof(hv)) == 0 || errno == ERANGE)
| > return 0;
|
| it looks to me as if this was doing the wrong thing in the first place,
| since HUGE_VAL is a valid number but not the only potentially invalid
| result? The actual test should be
|
| (errno == ERANGE && (r == HUGE_VAL || r == -HUGE_VAL || r == 0))
|
| but since the original code was failing whenever (errno == ERANGE),
| perhaps you could forget the HUGE_VAL stuff altogether and hope the
| implementation never sets that unless it found an error?
That could work (just testing for ERANGE).
christos
Home |
Main Index |
Thread Index |
Old Index