From: Christophe R. <cr...@us...> - 2004-06-08 14:49:41
|
Update of /cvsroot/sbcl/sbcl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15874 Modified Files: BUGS NEWS TODO version.lisp-expr Log Message: 0.8.11.4: FINALLY! Fixed bugs related to DOUBLE-FLOAT-EPSILON on x86. Die, bug #45, die a horrible death. ... make lisp code run with the fpu set to 53-bit mantissa; ... add code in number stack allocation to set the fpu to 64-bit precision when calling out to C, conditional on new optimization quality SB-C::FLOAT-ACCURACY (unexported, undocumented, etc) ... use FLOAT-ACCURACY around syscalls, since they don't involve the FPU. Also add code to allow fpu precision control in the (nominally private) sb-int:set-floating-point-modes. (this checkin fixes not only bugs #45 and #118, but also six of PFD's EPSILONS tests and 29 ieeefp-tests related to +, -, *, / and sqrt) Index: BUGS =================================================================== RCS file: /cvsroot/sbcl/sbcl/BUGS,v retrieving revision 1.400 retrieving revision 1.401 diff -u -d -r1.400 -r1.401 --- BUGS 8 Jun 2004 10:36:52 -0000 1.400 +++ BUGS 8 Jun 2004 14:49:14 -0000 1.401 @@ -156,25 +156,6 @@ so they could be supported after all. Very likely SIGCONTEXT-FLOATING-POINT-MODES could now be supported, too. -45: - a slew of floating-point-related errors reported by Peter Van Eynde - on July 25, 2000: - c: Many expressions generate floating infinity on x86/Linux: - (/ 1 0.0) - (/ 1 0.0d0) - (EXPT 10.0 1000) - (EXPT 10.0d0 1000) - PVE's regression tests want them to raise errors. sbcl-0.7.0.5 - on x86/Linux generates the infinities instead. That might or - might not be conforming behavior, but it's also inconsistent, - which is almost certainly wrong. (Inconsistency: (/ 1 0.0) - should give the same result as (/ 1.0 0.0), but instead (/ 1 0.0) - generates SINGLE-FLOAT-POSITIVE-INFINITY and (/ 1.0 0.0) - signals an error. - d: (in section12.erg) various forms a la - (FLOAT 1 DOUBLE-FLOAT-EPSILON) - don't give the right behavior. - 60: The debugger LIST-LOCATIONS command doesn't work properly. (How should it work properly?) @@ -359,34 +340,6 @@ (see also bug 279) -118: - as reported by Eric Marsden on cmu...@co... 2001-08-14: - (= (FLOAT 1 DOUBLE-FLOAT-EPSILON) - (+ (FLOAT 1 DOUBLE-FLOAT-EPSILON) DOUBLE-FLOAT-EPSILON)) => T - when of course it should be NIL. (He says it only fails for X86, - not SPARC; dunno about Alpha.) - - Also, "the same problem exists for LONG-FLOAT-EPSILON, - DOUBLE-FLOAT-NEGATIVE-EPSILON, LONG-FLOAT-NEGATIVE-EPSILON (though - for the -negative- the + is replaced by a - in the test)." - - Raymond Toy comments that this is tricky on the X86 since its FPU - uses 80-bit precision internally. - - Bruno Haible comments: - The values are those that are expected for an IEEE double-float - arithmetic. The problem appears to be that the rounding is not - IEEE on x86 compliant: namely, values are first rounded to 64 - bits mantissa precision, then only to 53 bits mantissa - precision. This gives different results than rounding to 53 bits - mantissa precision in a single step. - - The quick "fix", to permanently change the FPU control word from - 0x037f to 0x027f, will give problems with the fdlibm code that is - used for computing transcendental functions like sinh() etc. - so maybe we need to change the FPU control word to that for Lisp - code, and adjust it to the safe 0x037f for calls to C? - 124: As of version 0.pre7.14, SBCL's implementation of MACROLET makes the entire lexical environment at the point of MACROLET available Index: NEWS =================================================================== RCS file: /cvsroot/sbcl/sbcl/NEWS,v retrieving revision 1.564 retrieving revision 1.565 diff -u -d -r1.564 -r1.565 --- NEWS 8 Jun 2004 12:49:17 -0000 1.564 +++ NEWS 8 Jun 2004 14:49:26 -0000 1.565 @@ -2522,6 +2522,9 @@ * the behaviour of the standard function ED is now customizeable by third parties through a hook variable: see ED's documentation string for information on the protocol. + * fixed bugs 45d and 118: DOUBLE-FLOAT[-NEGATIVE]-EPSILON now + exhibit the required behaviour on the x86 platform. (thanks to + Peter van Eynde, Eric Marsden and Bruno Haible) * fixed bug 335: ATANH now computes the inverse hyperbolic tangent even for difficult arguments. (reported by Peter Graves) * fixed a bug in backquote printing: no more modification of the Index: TODO =================================================================== RCS file: /cvsroot/sbcl/sbcl/TODO,v retrieving revision 1.56 retrieving revision 1.57 diff -u -d -r1.56 -r1.57 --- TODO 28 May 2004 08:01:56 -0000 1.56 +++ TODO 8 Jun 2004 14:49:26 -0000 1.57 @@ -1,7 +1,6 @@ for early 0.8.x: * test file reworking - ** non-x86 ports now pass irrat.pure.lisp ** ports with less than 256Mb of heap (sparc, ppc and mips) now don't fail bit-vector.impure-cload.lisp * faster bootstrapping (both make.sh and slam.sh) Index: version.lisp-expr =================================================================== RCS file: /cvsroot/sbcl/sbcl/version.lisp-expr,v retrieving revision 1.1655 retrieving revision 1.1656 diff -u -d -r1.1655 -r1.1656 --- version.lisp-expr 8 Jun 2004 12:49:26 -0000 1.1655 +++ version.lisp-expr 8 Jun 2004 14:49:26 -0000 1.1656 @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.11.3" +"0.8.11.4" |