In message: <[EMAIL PROTECTED]>
Terry Lambert <[EMAIL PROTECTED]> writes:
: "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.
I think I don't understand what you are saying at all. It doesn't
seem top jive with the rest of the messages in this thread.
: 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.
Except that's wrong, and further messages in the thread showed. This
example shows that we don't support it in printf, since the above
example does ***NOT*** give +Inf, but rather whatever 2*DBL_MAX is.
The exponent range is ***NOT*** lost until printf truncates it, as my
test programs showed.
The one issue that I've seen is
long double a = 1.0L;
long double b = 1.0L + LDBL_EPSION
if (a == b) abort();
which is what I'm trying to fix. (note, "1.0L" must be spelled
"oneld()" and long double oneld() { return (1.0L);}) to avoid the
optimizer getting it right.
Warner
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message