Martin Raspaud wrote:

> Hi all
> [...]
>
> (defmacro define-IEEE-float (name
>                  &key (sign-bits 1)
>                  (exponant-bits 8)
>                  (mantissa-bits 23)
>                  (bias 127)
>                  (associated-type 'float))
>       (with-gensyms (significant exponant sign s-bits e-bits m-bits b
> value)
>     `(defun ,(intern (string-upcase (format nil "read-~s" name))) ()
>       (let* ((,s-bits ,sign-bits)
>          (,e-bits ,exponant-bits)
>          (,m-bits ,mantissa-bits)
>          (,b ,bias)
>          (,value (read-unsigned-integer (/ (+ ,s-bits ,e-bits ,m-bits) 
> 8)))
>          (,significant (+ (ash 1 ,m-bits) (logand (1- (ash 1 ,m-bits)) 
> ,value)))
>          (,exponant (- (logand (1- (ash 1 ,e-bits)) (ash ,value (- 
> ,m-bits))) ,b))
>          (,sign (ash ,value (- (+ ,e-bits ,m-bits)))))
>         (* ,significant (expt 2 ,exponant) (expt (coerce -1
> ,associated-type) ,sign))))))
> [...]

Ok, I found a solution : take que coerce out of the multiplication and 
put it arround (* ,significant ....)
Apparently it's better to let cmucl handle the type itself until the end...

Martin

Reply via email to