Update of /project/oct/cvsroot/oct In directory cl-net:/tmp/cvs-serv367
Modified Files: qd-io.lisp Log Message: Change MAKE-FLOAT to multiply by the sign AFTER we've created the quad-double. This way we create signed quad-double zeroes correctly. Previously, the sign was applied to the rational which loses the sign if the rational is 0.
--- /project/oct/cvsroot/oct/qd-io.lisp 2008/07/16 21:02:07 1.22 +++ /project/oct/cvsroot/oct/qd-io.lisp 2011/02/09 19:28:00 1.23 @@ -1,6 +1,6 @@ ;;;; -*- Mode: lisp -*- ;;;; -;;;; Copyright (c) 2007 Raymond Toy +;;;; Copyright (c) 2007, 2011 Raymond Toy ;;;; ;;;; Permission is hereby granted, free of charge, to any person ;;;; obtaining a copy of this software and associated documentation @@ -402,10 +402,11 @@ (declare (type (member -1 1) sign) (type unsigned-byte int-part frac-part) (fixnum scale exp)) - (rational-to-qd (* sign - (* (+ int-part (/ frac-part (expt 10 scale))) - (expt 10 exp))))) - + (let ((qd (rational-to-qd (* (+ int-part (/ frac-part (expt 10 scale))) + (expt 10 exp))))) + (if (minusp sign) + (neg-qd qd) + qd)))
;; This seems to work, but really needs to be rewritten! (defun read-qd (stream)