This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMU Common Lisp".
The branch, master has been updated via 375ce218ab639fbc0b433942dbb7398a0bcd0177 (commit) from e585e8d6acbc146e978d1c2c5171987b6ba2fddf (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 375ce218ab639fbc0b433942dbb7398a0bcd0177 Author: Raymond Toy toy.raymond@gmail.com Date: Thu Aug 14 21:06:20 2014 -0700
Fix ticket:106 by returning the correctly rounded value.
* src/lisp/e_exp.c: * Add special case to return the correctly rounded value of exp(1). * tests/trac.lisp: * Add test that the correct value is returned. * Add test that exp(x) is still monotonic around x = 1. * src/general-info/release-20f.txt: * Update.
diff --git a/src/general-info/release-20f.txt b/src/general-info/release-20f.txt index 265b0b5..92df6fa 100644 --- a/src/general-info/release-20f.txt +++ b/src/general-info/release-20f.txt @@ -97,6 +97,8 @@ New in this release: * In some situations KERNEL:DOUBLE-FLOAT-BITS on x86 would cause a segfault. This has been fixed. * For linux, motifd is no longer a 64-bit app. + * (exp 1d0) now returns the correctly rounded value of + e. Previously, it was off by one bit.
* Trac Tickets: * Ticket #90 fixed. @@ -111,6 +113,7 @@ New in this release: * Ticket #84 fixed on x86. * Ticket #105 fixed. * Ticket #101 fixed. + * Ticket #106 fixed.
* Other changes:
diff --git a/src/lisp/e_exp.c b/src/lisp/e_exp.c index 8233bc3..8b7ff6d 100644 --- a/src/lisp/e_exp.c +++ b/src/lisp/e_exp.c @@ -111,6 +111,17 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */ unsigned hx; union { int i[2]; double d; } ux;
+ /* + * CMUCL addition: Return correctly rounded value for + * exp(1). There are tests to verify that exp(x) is still + * monotonic around exp(1), so this change doens't break + * anything. + */ + if (x == 1) { + /* Return the correctly rounded value for x = 1 */ + return 2.718281828459045; + } + ux.d = x; hx = ux.i[HIWORD]; /* high word of x */ xsb = (hx>>31)&1; /* sign bit of x */ diff --git a/tests/trac.lisp b/tests/trac.lisp index 8253bc2..2bf420d 100644 --- a/tests/trac.lisp +++ b/tests/trac.lisp @@ -425,4 +425,14 @@ No dispatch function defined for #\W.") (read-string-fn "#\wtf")))
- \ No newline at end of file +(define-test trac.106 + (:tag :trac) + ;; Verify the value is correct + (assert-equal 2.718281828459045d0 + (exp 1d0)) + ;; Verify that exp is still monotonic around 1 + (assert-true (<= (exp (1- double-float-negative-epsilon)) + (exp 1d0) + (exp (1+ double-float-epsilon))))) + +
-----------------------------------------------------------------------
Summary of changes: src/general-info/release-20f.txt | 3 +++ src/lisp/e_exp.c | 11 +++++++++++ tests/trac.lisp | 12 +++++++++++- 3 files changed, 25 insertions(+), 1 deletion(-)
hooks/post-receive