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.

  • 2011-03
    • Documentation for functions added.
    • Bug fixes for elliptic functions.
    • Added implementation of theta functions.
  • 2011-02-09
    • 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.)
  • 2007-11-28
    • 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).
  • 2007-10-26
    • 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.
  • 2007-10-15
    • 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).
  • 2007-10-10
    • Oct now has print/read consistency, thanks to Richard Fateman, who provided a very nice method to convert bignums to quad-double.

Supported Lisps

This package has been tested with CMUCL, SBCL, Clisp, Clozure CL and Allegro. (Allegro has not been tested recently, though). The status of these Lisps is given in the table below:

Lisp Status
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
Ecl Not working
Allegro Working, but not recently tested

Note that development is primarily done using CMUCL.

Getting Oct

Currently the only way to obtain the software is via git. You can browse the source using the Browse Source link above, or you can use the gitweb interface to browse the sources.

To obtain the sources, you will have to clone the repository at git:// or

Mailing Lists

There are several mailing lists for Oct:

Additional Information

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 for some information about how Trac is configured and for hints which you may be interested in.

The maintainers

Starting Points

For a complete list of local wiki pages, see TitleIndex.

Last modified 11 months ago Last modified on 10/27/13 18:29:39