In the test suite, there are quite a few tests for log of negative
numbers. I was in the process of converting the generated tests to
return +quiet-<float>-nan-mask+ for :uo tests. However, this caused a
huge increase in the number of failures.
One of them is SINGLE-LOG-VALUE.41:
Form: (PROGN
"logs n uo v 80800000 0"
(IEEEFP-TESTS::SET-UP-FPCW-STATE :NEAREST)
(LET ((IEEEFP-TESTS::RESULT
(LOG
(IEEE754:MAKE-SINGLE-FLOAT
IEEEFP-TESTS::+LEAST-NEGATIVE-NORMALIZED-SINGLE-FLOAT+))))
(IF (COMPLEXP IEEEFP-TESTS::RESULT)
T
(LET ((IEEEFP-TESTS::RESULT-BITS
(IEEE754:SINGLE-FLOAT-BITS IEEEFP-TESTS::RESULT)))
(= (LOGAND IEEEFP-TESTS::RESULT-BITS
IEEEFP-TESTS::+QUIET-SINGLE-FLOAT-NAN-MASK+)
IEEEFP-TESTS::+QUIET-SINGLE-FLOAT-NAN-MASK+)))))
Expected value: T
The tests expects (log <negative) to be a NaN, but we were passing the
test because we returned T because we got a complex result.
Is this the desired answer? In terms of the test, I think we should
fail the test. When I modify the test to return the logand result and
an expected answer of quiet-single-float-nan-mask, we do fail, of
course.
Another interesting test is single-log-value.54. CMUCL says (log
<negative quiet NaN>) is #c(<quiet nan> pi). That's seems debatable.
Anyway, I wanted your opinion on whether Lisp should fail
single-log-value.41.
Ray