【发布时间】:2017-11-23 08:09:51
【问题描述】:
我使用 SBCL(64 位 v1.4.0)进行数值计算。 启用优化后,出现如下编译提示:
note: doing float to pointer coercion (cost 13) to "<return value>"
我使用的代码如下:
(defun add (a b)
(declare (optimize (speed 3) (safety 0)))
(declare (double-float a b))
(the double-float (+ a b)))
我也尝试过ftype 并得到了相同的注释。
另一方面,以下代码不显示注释:
(defun add-fixnum (a b)
(declare (optimize (speed 3) (safety 0)))
(declare (fixnum a b))
(the fixnum (+ a b)))
我认为 double-float 和 fixnum 都是 64 位宽。 为什么 SBCL 不能通过像 C 语言这样的寄存器返回双浮点值?有没有什么办法可以避免浮点到指针强制而无需内联扩展?
【问题讨论】:
标签: optimization double common-lisp