Changeset 308


Ignore:
Timestamp:
Jan 17, 2004, 7:34:41 PM (21 years ago)
Author:
Gary Byers
Message:

Handle denorms in INTEGER-DECODE-SHORT-FLOAT.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-0/l0-numbers.lisp

    r295 r308  
    888888
    889889
     890(defun integer-decode-denorm-short-float (mantissa sign)
     891  (declare (fixnum mantissa sign))
     892  (do* ((bias 0 (1+ bias))
     893        (sig mantissa (ash sig 1)))
     894       ((logbitp 23 sig)
     895        (values sig
     896                (- (- IEEE-single-float-bias)
     897                   IEEE-single-float-digits
     898                   bias)
     899                sign))))
    890900
    891901
    892902(defun integer-decode-short-float (sfloat)
    893903  (multiple-value-bind (mantissa exp sign)(fixnum-decode-short-float sfloat)
    894     (if (eq exp 255)
    895       (error "Can't decode NAN/Inf: ~s" sfloat))
    896     (setq exp (- exp (if (< mantissa #x800000)
    897                        (+ IEEE-single-float-mantissa-width IEEE-single-float-bias)
    898                        (+ IEEE-single-float-mantissa-width (1+ IEEE-single-float-bias)))))
    899     (values mantissa exp (if (eq sign 0) 1 -1))))
     904    (let* ((biased (- exp IEEE-single-float-bias IEEE-single-float-digits)))
     905      (setq sign (if (eql 0 sign) 1 -1))
     906      (if (eq exp 255)
     907        (error "Can't decode NAN/Inf: ~s" sfloat))
     908      (if (eql 0 exp)
     909        (if (eql 0 mantissa)
     910          (values 0 biased sign)
     911          (integer-decode-denorm-short-float (ash mantissa 1) sign))
     912        (values (logior #x800000 mantissa) biased sign)))))
     913
    900914
    901915
     
    15841598
    15851599(defun byte-position (bytespec)
    1586   (- (integer-length bytespec) (logcount bytespec)))
     1600  (if (> bytespec 0)
     1601    (- (integer-length bytespec) (logcount bytespec))
     1602    (- bytespec)))
    15871603
    15881604
Note: See TracChangeset for help on using the changeset viewer.