数値計算にはSBCL(64ビットv1.4.0)を使用します。コンパイラ・ノート以下、最適化を有効にした後 が表示されます。Common Lispで浮動小数点からポインタへの変換を避ける
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)))
私は二重フロートとFIXNUMが広い両方の64ビットであると思います。 なぜSBCLはC言語のようなレジスタを介してdouble float値を返すことができないのですか?そして、インライン展開せずに浮動小数点型の強制変換を回避する方法はありますか?
https://groups.google.com/forum/#!topic/comp.lang.lisp/AsKvR0emFtU – Barmar