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

Re: string->number

 | From: Thomas Bushnell BSG <tb@xxxxxxxxxx>
 | Date: Thu, 02 Jun 2005 19:08:56 -0700
 | Aubrey Jaffer <agj@xxxxxxxxxxxx> writes:
 | >  | From: Thomas Bushnell BSG <tb@xxxxxxxxxx>
 | >  | Date: Thu, 02 Jun 2005 13:05:29 -0700
 | >
 | > ...  My point is that inexact numbers correspond to real number
 | > neighborhoods; and hence have finite precision.
 | Ok, that's fine.  I agree completely with what you've said about
 | *inexact* numbers.  
 | ... I think that a Scheme implementation may also extend the nature
 | of an external representation if it wishes, provided it keeps
 | numbers separate from identifiers for all programs, in the right
 | way.
 | In other words, an implementation can invent a new syntax, say #s,
 | where #sNNNN is the square root of NNNN, exact iff NNNN is.  For a
 | great many of the standard operations of Scheme, this exactness can
 | be easily preserved with a straightforward implementation.

I am having difficulty with inexact square-root numbers.  The real
numbers have a total ordering.  So for any two real numbers x1 and x2,
either x1 < x2, x1 > x2, or x1 = x2.

#s2. splits the 1.4142135623730951 neighborhood into three parts; lets
call them #s2.-, #s2., and #s2.+.  Because

  "... it is the duty of each implementation to make the result as
  close as practical to the mathematically ideal result",

1.414213562373095048801689 must map to #s2., while 1.4142135623730951
maps to #s2.+.  The split neighborhoods must be distinguished from
each other because of the total ordering.  But a floating-point
representation has no additional bits to encode which side of which
square-root any particular floating-point value is.

Thus inexact square-root numbers and inexact floating-point
representation are incompatible.

 | NUMBER->STRING must produce this representation, and STRING->NUMBER
 | must be able to handle it, and it should work the same as READ and in
 | program text.  Such an extension is fully allowed by R5RS.
 | If you argue that external representations for numbers CANNOT be
 | extended, then you can make no sense of the explicit statements in the
 | standard and the rationale for supporting exact numbers of just this
 | sort.

Polar representation works because the polar coordinates of Real
numbers are in one-to-one correspondence with the Real numbers.
But one cannot casually add new inexact representations.