This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home.

Source for wiki NumericTower version 6

author

cowan

comment


    

ipnr

69.195.52.55

name

NumericTower

readonly

0

text

== The numeric tower ==

This is an analysis of the R5RS provision that the full numeric tower may be subsetted.  Four boolean feature settings characterize different kinds of numeric towers: `exactness-preserving`, `ratios`, `inexact`, and `complex`, which refer to the closure of exact numbers under rational operations (except `/`), exact non-integer values, inexact rationals, and non-real numbers, respectively.  A priori, any combination of these features might be implemented, except that `ratios` makes no sense without `exactness-preserving`.  I also assume that `complex` makes no sense without either `ratios` or `inexact`: Gaussian integers by themselves seem to be of little use.

So here are ten possible numeric towers.  I use `+` if a feature is present and `-` if it is absent, and give a general description of the resulting tower.


||exactness-preserving||ratios||inexact||complex||Description||
||-||-||-||-||A "toy" tower with fixnums (bounded exact integers) only.  Possibly appropriate where no numerical work will be done.  SSCM, !SigScheme provide this.||
||-||-||+||-||A Scheme where all numbers are real and all arithmetic happens in essentially constant time.  Chicken provides this unless you import the `numbers` package.  Sixx, Sizzle provide this.  Most non-Lisp languages are like this, except that their fixnums wrap on overflow instead of switching to flonums, producing grossly incorrect results.||
||-||-||+||+||The complex-number equivalent of the preceding.  Non-real numbers are typically inexact/inexact. Stalin provides this.||
||+||-||-||-||Unlimited-precision integers only.  Possibly usable for crypto work.  Fortunately, ratios are fairly cheap given bignums.||
||+||-||+||-||A good all-round compromise, providing exact integers and inexact real numbers.  ISLisp requires this.  Bigloo, Chibi, SCM, Scheme 9 provide this.  Many people seem to like this tower.||
||+||-||+||+||The same as the preceding, but with inexact/inexact non-real numbers as well.||
||+||+||-||-||Exact rational numbers only.  Dream provides this.  Reasonable for some purposes, but will often run very slowly without inexact support, so unsuitable for scientific-type work.||
||+||-||+||+||The same as the preceding, but with exact general complex numbers.  Even less suitable for scientific-type work, given that in practice non-real numbers are usually inexact/inexact.||
||+||+||+||-||Full numeric tower for real numbers only.  Psyche provides this.||
||+||+||+||+||Full numeric tower.  R6RS and CL require this.  Racket, Gauche, MIT, Gambit, Chicken with the `numbers` package, Scheme48/scsh, Kawa, Chez, STklos provide this.  Guile, SISC provide this with inexact/inexact complex numbers only.  Many people seem to like this tower.||

time

2010-12-24 15:50:05

version

6