Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Oct 2002 15:36:04 -0800
From:      Terry Lambert <tlambert2@mindspring.com>
To:        "M. Warner Losh" <imp@bsdimp.com>
Cc:        bde@zeta.org.au, rittle@labs.mot.com, rittle@latour.rsch.comm.mot.com, current@FreeBSD.ORG, dschultz@uclink.Berkeley.EDU
Subject:   Re: Lack of real long double support
Message-ID:  <3DC06CE4.57CF2F96@mindspring.com>
References:  <20021030.012222.123041962.imp@bsdimp.com> <20021030215500.E5692-100000@gamplex.bde.org> <20021030.162239.52163953.imp@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
"M. Warner Losh" wrote:
> And there's a comment:
>  * 64-bit precision often gives bad results with high level languages
>  * because it makes the results of calculations depend on whether
>  * intermediate values are stored in memory or in FPU registers.
> which seems like a compiler issue, not an OS issue to me.

The compiler must emit instructions to truncate and set flags, as
well as generating pseudo-exceptions (should they be called for)
in the case that the storage is in registers bigger than the memory
backing them.  IT doesn't do this.

This is the basis of Bruce's complaint:

http://docs.freebsd.org/cgi/getmsg.cgi?fetch=1099099+0+archive/2002/freebsd-current/20021027.freebsd-current

| gcc can't actually support the full range, since it doesn't control
| the runtime environement (it could issue a fninit before main() to
| change the default, but it shouldn't and doesn't).  The exponent
| range is lost long before printf() is reached.  E.g.,
| 
|         long double x= DBL_MAX;
|         long double y = 2 * x;
| 
| gives +Inf for y since the result is doesn't fit in 53-bit precision.
| The system header correctly reports this default precision.  Any header
| genrated by the gcc build should be no different, since the build should
| run in the target environment.

-- Terry

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




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