From ef62339253a05fffb2e68a934d85af467cce7691 Mon Sep 17 00:00:00 2001 From: "Tarn W. Burton" Date: Thu, 27 Jun 2024 14:58:20 -0400 Subject: [PATCH] jaffer: fix some bugs --- code/jaffer/implementation.lisp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/code/jaffer/implementation.lisp b/code/jaffer/implementation.lisp index d14374c3..20f3235d 100644 --- a/code/jaffer/implementation.lisp +++ b/code/jaffer/implementation.lisp @@ -15,18 +15,19 @@ (bex (- (integer-length ,significand) (integer-length scale) ,significand-size)) - (tmp (+ bex ,exponent 1021 ,significand-size))) + (tmp (+ bex ,exponent 1021 ,significand-size)) + (mantlen ,significand-size)) (when (minusp tmp) (decf bex (1+ tmp)) - (setf scale (ash scale 1))) + (incf mantlen tmp)) (let* ((num (ash ,significand (- bex))) (quotient (round num scale))) - (when (> (integer-length quotient) ,significand-size) + (when (> (integer-length quotient) mantlen) (incf bex) - (setf quotient (round num (ash scale 2)))) + (setf quotient (round num (ash scale 1)))) (scale-float (coerce quotient ',result-type) (+ bex exponent)))) - (let ((num (* ,significand (expt 5 ,exponent))) - (bex (- (integer-length ,significand-size)))) + (let* ((num (* ,significand (expt 5 ,exponent))) + (bex (- (integer-length num) ,significand-size))) (if (plusp bex) (scale-float (coerce (round num (ash 1 bex)) ',result-type) (+ bex exponent))