Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Turn off compiler macros converting two-arg functions into CL functions or QD-REAL functions. They don't handle all the cases. If we're going to make this CMUCL-specific, deftransforms would be much easier and much better.
For CMUCL, define compiler macros to convert two-arg-foo into the appropriate CL function or QD-REAL function so we don't have to do CLOS dispatch, if the types are known at compile-time.
Add or cleanup some docstrings.
Oops. QDI package no longer exists. Use OCTI.
o Rename QUAD-DOUBLE-INTERNAL package to OCT-INTERNAL, with nickname OCTI instead of QDI. o Rename OCT package to NET.COMMON-LISP.OCT, with a nickname of OCT o Remove nickname of QD. (Conflicts with other packages dealing with quad-doubles.) o Update all uses of QDI: to OCTI: qd-fun.lisp: o Add REM-PI/2 to do a simpler computation if the arg is small enough. Otherwise, use the accurate but expensive rem operation. o Renamed ACCURATE-SIN-QD to SIN-QD, etc. o Update SIN-QD etc to use REM-PI/2.
Use package #:oct, not #:qd.
qd-io.lisp: o Add RATIONAL-TO-QD, a simple, fast and accurate method to convert rationals to quad-doubles. (From Richard Fateman.) o Use RATIONAL-TO-QD to create a quad-float qd-methods.lisp: o Use RATIONAL-TO-QD to create a quad-float from a bignum and ratio. qd-package.lisp: o Export RATIONAL-TO-QD
Minor optimization converting a rational to a qd-real. If the denominator is 1, skip the qd-real division.
Add RATIONALIZE methods. Algorithm graciously provided by Bruno Haible. qd-package.lisp: o Shadow RATIONALIZE qd-methods.lisp: o Add RATIONALIZE methods for CL:REAL's and QD-REAL's..
MAKE-QD should handle rationals better instead of converting them to doubles and then converting the qd-real. Convert the numerator and denominator to qd-real, and the divide. (This should be done better.) qd-class.lisp: o Change method to work on floats, instead of reals. qd-methods.lisp: o Add method to handle rationals.
Add method RATIONAL to convert a quad-double to a rational. qd-package.lisp: o Appropriately shadow and export RATIONAL. o Need to export WITH-QD-PARTS from QDI. qd-methods.lisp: o Define methods for RATIONAL for reals and qd-reals. qd-complex.lisp: o Use CL:RATIONAL as appropriate for the CL rational type.
T should be t (for Allegro case-sensitive modern-mode).
qd-package.lisp: o Rearrange some exports so the CMU ones are all grouped together. o Export new constants pi/2, pi/4, 2pi, and log2. o Export the qd-real and qd-complex types. qd-methods.lisp: o Define new constants for pi/2, pi/4, 2pi, and log2. o Update some of the macrolets to work with a modern-mode lisp, like Allegro. qd-complex.lisp: o Use the new constants as needed.
qd-class.lisp: o Oops. Forgot to rename the defgenerics. qd-complex.lisp: o QLOG no longer exists. Use LOG. qd-methods.lisp: o QLOG no longer exists. Use LOG.
Oops. Forgot to convert qabs to abs.
Get rid of the extra layer of function calls and define the special functions as methods directly.
Oops. Last change went to the wrong spot. Only valid for =.
Forgot to handle comparisons of QD-COMPLEX and another number.
qd-package.lisp: o Shadow FLOAT-DIGITS qd-methods.lisp: o Add FLOAT-DIGITS method.
Use uninterned symbols for IN-PACKAGE.
qd-methods.lisp: o Oops. Move COERCE to qd-complex.lisp because we use the #q reader macro. (This needs to be reorganized better.) o Add RANDOM methods so we can generate quad-double random numbers. qd-package.lisp: o Shadow RANDOM so we can add our own RANDOM to generate quad-doubles. qd-complex.lisp: o COERCE moved here.
Add license information (MIT).
qd-package.lisp: o Shadow CL:COERCE and export QD:COERCE qd-methods.lisp: o Define methods for COERCE so we can use COERCE with QD-REAL and QD-COMPLEX.
qd-io.lisp: o Get rid of the #q reader that returns an internal %qd-real. qd-methods.lisp: o QPHASE was returning the wrong kind of object for positive values. o Replace use of #q0 with the construction of a qd-real 0. qd-const.lisp: o Replace all uses of #q with #.(qd-from-string ...).
qd-complex.lisp: o Moved some methods from qd-methods.lisp to here. o Was missing TWO-ARG-+ for qd-complex and qd-real (and vice versa) o Fixed mistake in TWO-ARG-- (QD-COMPLEX REAL) o Fixed mistake in TWO-ARG-- (QD-COMPLEX CL:COMPLEX) o Was missing TWO-ARG-- (QD_COMPLEX QD-REAL) and vice versa. o Was missing TWO-ARG-/ for (QD-REAL QD-COMPLEX) qd-methods.lisp: o Moved some methods from here to qd-methods.lisp o Reimplement QFLOAT (RATIO QD-REAL) to use internal functions instead of calling TWO-ARG-/ and QFLOAT o QABS (QD-COMPLEX) was returning the wrong thing.
For the basic arithmetic operations, we need to separate out floats from rationals because we need to coerce rationals to qd-reals to preserve the desired accuracy. Previously, the rationals were converted to double-float, which loses accuracy.
Add compiler macro for /= to handle the two-arg case.
o Fix mistake in reader that was using qd-one (a %quad-double, not qd-real). o Add +qd-real-one+ to hold 1 as a qd-real.
Oops. Need the CL versions of SCALE-FLOAT and *.
Add some constants for most-positive quad-double, least-positive quad-double, and least-positive normalized quad-double.
qd-class.lisp: o For CMU, try to print out infinities and NaN's nicely, instead of signaling an error. o For QD-COMPLEX, print the components using #q notation inside the #q(). qd-methods.lisp: o When reading #q(...), call READ to read the components so we can handle other stuff inside like #. and friends.
Oops. QD-CSSQS was not doing the right thing when it was replaced by HYPOT-AUX-QD and HYPOT-QD.
Check the sign of the arg via float-sign to see if we need the complex log or not.
For QATANH, use the complex version only if |x| > 1, not if |x| = 1.
qd-fun.lisp: o SQRT-QD has round-off problems for very large and very small numbers. Solve this by scaling the number by a power of 4 before computing the square root. o Moved LOGB-FINITE and the core of QD-CSSQS to this file from qd-methods.lisp. Rename the core routine as HYPOT-QD. o Use it in ATAN-QD/NEWTON to get rid of unnecessary overflow. qd-methods.lisp: o Moved LOGB-FINITE and the core of QD-CSSQS from this file to qd-fun.lisp. Use HYPOT-QD in QD-CSSQS. qd-package.lisp: o Export HYPOT-QD.
Support for infinities for CMUCL. Other platforms don't currently support infinities. qd-class.lisp: o Print out infinities. qd-io.lisp: o QD-FORMAT handles infinities qd-methods.lisp: o Add constants for positive and negative quad-double infinities. qd-package.lisp: o Export +PI+ o Export infinities.
o Export a few more symbols from QDI o Remove QDI package qualifiers from exported functions.
Add a method for QEXPT for QD-REAL raised to an integer power.
Define compiler macros to expand <, >, >=, and <= into the corresponding two-arg-<foo> functions.
o Oops. The class is CL:FLOAT, not just FLOAT. o Macroize the <, >, <=, and >= functions.
o (FLOAT <qd> 1f0) was returning a double-float instead of a single-float. o Use QD-PARTS to extract the components in QFLOAT. (Generates slightly better code on CMUCL.)
Update the QFLOAT methods so we can accurately convert ratios (and integers) to quad-doubles.
Add compiler macros for +, -, *, /.
QACOSH for qd-real was totally wrong.
Add missing methods for expt.
Remove QDI package qualifiers.
Oops. Don't conjugate the result for qatanh of a qd-real.
Print a warning if the #q reader is given an arg.
o QZEROP needs to work with qd-complex. o QZEROP needs to work with CL number type. o Add support for FROUND and SIGNUM.
Add support for CIS and PHASE.
QASIN for qd-real was not correctly handling the case where the arg was not in [-1, 1].
o QATAN wasn't properly handling the possible types for the optional arg X.
o Add support for asin, acos, acosh, atanh outside the primary real-valued domain. o Add support for asin, acos, acosh, atanh for complex args.
Add more missing methods to handle qd-complex and some CMUCL-specific double-double-float's.
o Add SCALB o Add LOG1P o FLOAT-SIGN takes two args, not one.
o Remove extraneous paren. o Add LOGB-FINITE instead of using the version from KERNEL. o Fix error in QATAn for REAL args. Need to check for optional X.
o Fix typos in REALPART and IMAGPART for QD-REAL. o Move SCALE-FLOAT and friends closer to the beginning of the file. o Move comparison operators closer to the beginning of the file. o Add QD-CSSQS to compute sum of squares accurately without overflow. o Use QD-CSSQS in QABS for QD-COMPLEX.
o LOG can return qd-complex's now. o Add support for MIN and MAX.
o Fix type issues in QLOG. Wasn't passing the right types of args to some functions. o The comparison operators weren't handling the case of both args being a QD-REAL. o TWO-ARG-= forgot the case of both args being QD-REAL. o Add FLOAT-SIGN support.
o Add REALPART, IMAGPART o Reorder some code.
Remove debugging prints and fix issue with rounding. Was missing a test for an odd result for rounding to even.
o Fix mistake in truncate, which takes 2 args, not 1. o Add support for abs, round. (Round is not working right.)
o Fix mistake in zerop, minusp, plusp. o Add support for floor, ceiling, truncate, and the corresponding float versions.
Add DECODE-FLOAT, INTEGER-DECODE-FLOAT, SCALE-FLOAT.
o Rename class QUAD-DOUBLE to QD-REAL. o Add class QD-COMPLEX for complex quad-double numbers. o Move almost all methods on quad-doubles to a new file (qd-methods.lisp).
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|