[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

*To*: rrrs-authors*Subject*: inexact numbers in R3.99RS*From*: will@cs.uoregon.edu*Date*: Tue, 31 Oct 89 14:26:39 PST

I want to point out and explain a few changes that were made in R3.99RS that have to do with inexact numbers. First of all, I added an explicit note to the description of MAX and MIN. Secondly, I relaxed the specification of NUMBER->STRING to allow for implementations that don't necessarily use floating point to represent inexact numbers. Thirdly, I followed a suggestion made by the P1178 editors in making part of the behavior of STRING->NUMBER optional to take into account the fact that all numbers other than exact integers are optional. Here are the relevant excerpts from the LaTeX for R3.99RS. You don't need to tell me about the place where I used "an" when I should have used "a". \begin{entry}{% \proto{max}{ \vri{x} \vrii{x} \dotsfoo}{essential procedure} \proto{min}{ \vri{x} \vrii{x} \dotsfoo}{essential procedure}} These procedures return the maximum or minimum of their arguments. \begin{scheme} (max 3 4) \ev 4 ; exact (max 3.9 4) \ev 4.0 ; inexact% \end{scheme} \begin{note} If any argument is inexact, then the result will also be inexact (unless the procedure can prove that the inaccuracy is not large enough to affect the result, which is possible only in unusual implementations). If \ide{min} or \ide{max} is used to compare numbers of mixed exactness, and the numerical value of the result cannot be represented as an inexact number without loss of accuracy, then the procedure may report a violation of an implementation restriction. \end{note} \end{entry} \begin{entry}{% \proto{number->string}{ number}{essential procedure} \proto{number->string}{ number radix}{essential procedure}} \vr{Radix} must be an exact integer, either 2, 8, 10, or 16. If omitted, \vr{radix} defaults to 10. The procedure \ide{number\coerce{}string} takes a number and a radix and returns as a string an external representation of the given number in the given radix such that \begin{scheme} (let ((number \vr{number}) (radix \vr{radix})) (eqv? number (string->number (number->string number radix) radix))) \end{scheme} is true. It is an error if no possible result makes this expression true. If \vr{number} is inexact, the radix is 10, and the above expression can be satisfied by a result that contains a decimal point, then the result contains a decimal point and is expressed using the minimum number of digits (exclusive of exponent and trailing zeroes) needed to make the above expression true~\cite{Heuristic}; otherwise the format of the result is unspecified. The result returned by \ide{number\coerce{}string} never contains an explicit radix prefix. \begin{note} The error case can occur only when \vr{number} is not a complex number or is a complex number with an non-rational real or imaginary part. \end{note} \begin{rationale} If \vr{number} is an inexact number represented using flonums, and the radix is 10, then the above expression is normally satisfied by a result containing a decimal point. The unspecified case allows for infinities, NaNs, and non-flonum representations. \end{rationale} \end{entry} \begin{entry}{% \proto{string->number}{ string}{essential procedure} \proto{string->number}{ string radix}{essential procedure}} %%R4%% I didn't include the (string->number string radix exactness) % case, since I haven't heard any resolution of the coding to be used % for the third argument. Returns a number of the maximally precise representation expressed by the given \vr{string}. \vr{Radix} must be an exact integer, either 2, 8, 10, or 16. If supplied, \vr{radix} is a default radix that may be overridden by an explicit radix prefix in \vr{string} (e.g. {\tt "\#o177"}). If \vr{radix} is not supplied, then the default radix is 10. If \vr{string} is not a syntactically valid notation for a number, then \ide{string->number} returns \schfalse{}. \begin{scheme} (string->number "100") \ev 100 (string->number "100" 16) \ev 256 (string->number "1e2") \ev 100.0 (string->number "15\#\#") \ev 1500.0% \end{scheme} \begin{note} Although \ide{string->number} is an essential procedure, an implementation may restrict its domain in the following ways. \ide{String->number} is permitted to return \schfalse{} whenever \vr{string} contains an explicit radix prefix. If all numbers supported by an implementation are real, then \ide{string->number} is permitted to return \schfalse{} whenever \vr{string} uses the polar or rectangular notations for complex numbers. If all numbers are integers, then \ide{string->number} may return \schfalse{} whenever the fractional notation is used. If all numbers are exact, then \ide{string->number} may return \schfalse{} whenever an exponent marker or explicit exactness prefix is used, or if a {\tt \#} appears in place of a digit. If all inexact numbers are integers, then \ide{string->number} may return \schfalse{} whenever a decimal point is used. \end{note} \end{entry}

- Prev by Date:
**records; BABY-DOE; another vote** - Next by Date:
**another dumb question about numbers** - Prev by thread:
**Re: records; BABY-DOE; another vote** - Next by thread:
**another dumb question about numbers** - Index(es):