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
