Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 9 Jan 2009 08:57:26 -0700
From:      John Hein <jhein@timing.com>
To:        =?UTF-8?B?VsOhY2xhdiBIYWlzbWFu?= <v.haisman@sh.cvut.cz>
Cc:        freebsd-standards@FreeBSD.ORG, das@FreeBSD.ORG, freebsd-gnats-submit@FreeBSD.ORG, imp@FreeBSD.ORG
Subject:   Re: standards/130067: Wrong numeric limits in system headers?
Message-ID:  <18791.29670.321788.799095@gromit.timing.com>
In-Reply-To: <496676AB.9040905@sh.cvut.cz>
References:  <200812302231.mBUMVUtf092910@www.freebsd.org> <20081231215445.S3923@delplex.bde.org> <20090106190313.GA15233@zim.MIT.EDU> <496676AB.9040905@sh.cvut.cz>

next in thread | previous in thread | raw e-mail | index | archive | help
V=E1clav Haisman wrote at 22:56 +0100 on Jan  8, 2009:
 > David Schultz wrote, On 6.1.2009 20:03:
 > > On FreeBSD/i386, long doubles are represented with 64 bits of
 > > precision, but computations are performed with 53 bits of
 > > precision. In a sane world, this discrepancy wouldn't exist, but
 > > for reasons I won't get into, they do, and probably always will.
 > > =

 > > C99 defines the LDBL constants based on what can be represented,
 > > not what can be computed as the result of arithmetic operations,
 > > so my interpretation is that the values in float.h are correct,
 > > though confusing.
 > I am not language lawyer but even if it were true that the constants a=
re
 > right, there is still the problem that they (especially the LDBL_MAX v=
alue)
 > are useless with the provided GCC. Either GCC or the headers should be=

 > changed. Otherwise the constants are rather useless and unusable.

FWIW, when you compile the OP's sample code on i386 with -pedantic
(with 6.x's base gcc 3.4.6 or 7.x's base gcc 4.2.1), you get:

x.cc:11: error: floating constant exceeds range of 'long double'

(the LDBL_MAX line)

That seems to tip the scale more to the 'float.h is wrong' side.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?18791.29670.321788.799095>