Welcome to Oct, a portable implementation of quad-double numbers
Oct is a portable Lisp implementation of quad-double arithmetic. This gives about 65 digits of precision. Quad-double arithmetic uses four double-float numbers to represent an extended precision number.
The implementation is modeled on the quad-double package by Yozo Hida. That package is in C++, but we have translated parts of it and extended it to use Lisp. The intent is to provide all of the CL arithmetic functions with a quad-double implementation.
Here is brief summary of some recent changeds. Check the wiki timeline for more detailed information of changes.
- Documentation for functions added.
- Bug fixes for elliptic functions.
- Added implementation of theta functions.
- For Lisp's that support signed zeros for floating point (like cmucl and sbcl), Oct now correctly handles signed quad-double zeroes.
- The CVS repository has been moved to Git. The CVS repository is still available but will not be updated. Use Git to obtain the latest versions. (See Oct gitweb for more links.)
- Oct now passes all of the tests on Allegro/x86. The main change was not to compile with safety 0. This messes up Allegro's tracking of the precision.
- To help implementations (like Allegro or Clisp) that use arrays for storing %quad-double numbers, many functions now support an optional third arg which is where the result should be written. This is like how bit-and works. This should work correctly with both an array or (complex double-double-float) implementation, but perhaps some care is needed to make sure it works for both.
- CMUCL can use either an array or a (complex double-double-float) to store a %quad-double. However, simple timing measurements indicate that arrays are slightly slower to much slower than using (complex double-double-float).
- A Pade approximation for exp has been added. This is currently not used, but tests show that it is 25% faster than the current method, but it loses about 3 bits of precision. This was contributed by Richard Fateman.
- The OCT package has been renamed. The package is now NET.COMMON-LISP.OCT, with a nickname of OCT.
- QD is no longer a nickname for OCT.
- QUAD-DOUBLE-INTERNAL has been renamed to OCT-INTERNAL, with a nickname of OCTI. The old nickname QDI has been removed
- Oct has a more accurate argument reduction for the trig functions. This allows Oct to compute cos(2120) correctly (which is about -0.925879).
- Oct now has print/read consistency, thanks to Richard Fateman, who provided a very nice method to convert bignums to quad-double.
|CMUCL||All tests pass|
|SBCL||All tests pass|
|CCL||All tests pass except for two, which are probably bugs in CCL|
|Clisp||All tests pass, but clisp doesn't support signed floating-point zeros|
|Allegro||Working, but not recently tested|
Note that development is primarily done using CMUCL.
To obtain the sources, you will have to clone the repository at git://common-lisp.net/projects/oct/oct.git or http://common-lisp.net/r/projects/oct/oct.git.
There are several mailing lists for Oct:
- Oct-devel for developers
- Oct-cvs for commit logs. Despite the name, this also contains the commits from git.
- Oct-announce for announcements. This is a very low volume list.
- Oct-ticket for changes to the Trac ticket system for Oct.
For additional information see:
Other information can be found on the Oct project page.
Please read the TracGuide to help you get started with your project.
Also see http://common-lisp.net/trac-intro.shtml for some information about how Trac is configured and for hints which you may be interested in.
The common-lisp.net maintainers
- TracGuide -- Built-in Documentation
- The Trac project -- Trac Open Source Project
- Trac FAQ -- Frequently Asked Questions
- TracSupport -- Trac Support
For a complete list of local wiki pages, see TitleIndex.