#92: Type-derivation for log is inconsistent --------------------+------------------------------------------------------- Reporter: rtoy | Owner: somebody Type: defect | Status: new Priority: major | Milestone: Component: Core | Version: 2014-02 Keywords: | --------------------+------------------------------------------------------- Consider {{{ (defun foo (x) (declare (type (double-float 0d0) x)) (log x)) }}} When compiled, the compiler says the return type for {{{foo}}} is {{{(OR DOUBLE-FLOAT (COMPLEX DOUBLE-FLOAT))}}}. This is inconsistent with the return value of {{{(log 0d0)}}} and {{{(log -0d0)}}} which is {{{EXT :DOUBLE-FLOAT-NEGATIVE-INFINITY}}} (when the {{{:DIVIDE-BY-ZERO}}} trap is disabled).
The correct derived type should be just {{{DOUBLE-FLOAT}}}.
#92: Type-derivation for log is inconsistent ---------------------+------------------------------------------------------ Reporter: rtoy | Owner: somebody Type: defect | Status: closed Priority: major | Milestone: Component: Core | Version: 2014-02 Resolution: fixed | Keywords: ---------------------+------------------------------------------------------ Changes (by toy.raymond@…):
* status: new => closed * resolution: => fixed
Comment:
commit 8970ad11b03f863b40a9ee352d3aced52b783cce Author: Raymond Toy toy.raymond@gmail.com Date: Sun Feb 9 09:53:11 2014 -0800
Fix ticket:92
Type derivation for log fixed to be consistent with the actual returned values.
* src/compiler/float-tran.lisp: * Update {{{LOG-DERIVE-TYPE-AUX-1}}} to compute the correct type.
* tests/trac.lisp: * Add test for trac ticket:92
#92: Type-derivation for log is inconsistent ---------------------+------------------------------------------------------ Reporter: rtoy | Owner: somebody Type: defect | Status: reopened Priority: major | Milestone: Component: Core | Version: 2014-02 Resolution: | Keywords: ---------------------+------------------------------------------------------ Changes (by rtoy):
* status: closed => reopened * resolution: fixed =>
Comment:
This is actually incorrect. We really want {{{log(-0)}}} to return {{{-inf + i*pi}}} so that the branch cuts of special functions can be computed correctly from the definition.