( Implementation restrictions

Info Catalog ( Exactness ( Numbers ( Syntax of numerical constants
 6.2.3 Implementation restrictions
 Implementations of Scheme are not required to implement the whole tower
 of subtypes given in section  Numerical types, but they must
 implement a coherent subset consistent with both the purposes of the
 implementation and the spirit of the Scheme language.  For example, an
 implementation in which all numbers are real may still be quite useful.
 Implementations may also support only a limited range of numbers of any
 type, subject to the requirements of this section.  The supported range
 for exact numbers of any type may be different from the supported range
 for inexact numbers of that type.  For example, an implementation that
 uses flonums to represent all its inexact real numbers may support a
 practically unbounded range of exact integers and rationals while
 limiting the range of inexact reals (and therefore the range of inexact
 integers and rationals) to the dynamic range of the flonum format.
 Furthermore the gaps between the representable inexact integers and
 rationals are likely to be very large in such an implementation as the
 limits of this range are approached.
 An implementation of Scheme must support exact integers throughout the
 range of numbers that may be used for indexes of lists, vectors, and
 strings or that may result from computing the length of a list, vector,
 or string.  The `length', `vector-length', and `string-length'
 procedures must return an exact integer, and it is an error to use
 anything but an exact integer as an index.  Furthermore any integer
 constant within the index range, if expressed by an exact integer
 syntax, will indeed be read as an exact integer, regardless of any
 implementation restrictions that may apply outside this range.
 Finally, the procedures listed below will always return an exact
 integer result provided all their arguments are exact integers and the
 mathematically expected result is representable as an exact integer
 within the implementation:
      +            -             *
      quotient     remainder     modulo
      max          min           abs
      numerator    denominator   gcd
      lcm          floor         ceiling
      truncate     round         rationalize
 Implementations are encouraged, but not required, to support exact
 integers and exact rationals of practically unlimited size and
 precision, and to implement the above procedures and the `/' procedure
 in such a way that they always return exact results when given exact
 arguments.  If one of these procedures is unable to deliver an exact
 result when given exact arguments, then it may either report a
 violation of an implementation restriction or it may silently coerce
 its result to an inexact number.  Such a coercion may cause an error
 An implementation may use floating point and other approximate
 representation strategies for inexact numbers.
 This report recommends, but does not require, that the IEEE 32-bit and
 64-bit floating point standards be followed by implementations that use
 flonum representations, and that implementations using other
 representations should match or exceed the precision achievable using
 these floating point standards [IEEE].
 In particular, implementations that use flonum representations must
 follow these rules: A flonum result must be represented with at least
 as much precision as is used to express any of the inexact arguments to
 that operation.  It is desirable (but not required) for potentially
 inexact operations such as `sqrt', when applied to exact arguments, to
 produce exact answers whenever possible (for example the square root of
 an exact 4 ought to be an exact 2).  If, however, an exact number is
 operated upon so as to produce an inexact result (as by `sqrt'), and if
 the result is represented as a flonum, then the most precise flonum
 format available must be used; but if the result is represented in some
 other way then the representation must have at least as much precision
 as the most precise flonum format available.
 Although Scheme allows a variety of written notations for numbers, any
 particular implementation may support only some of them.  For example,
 an implementation in which all numbers are real need not support the
 rectangular and polar notations for complex numbers.  If an
 implementation encounters an exact numerical constant that it cannot
 represent as an exact number, then it may either report a violation of
 an implementation restriction or it may silently represent the constant
 by an inexact number.
Info Catalog ( Exactness ( Numbers ( Syntax of numerical constants
automatically generated byinfo2html