| From: Thomas Bushnell BSG <xxxxxx@becket.net> | Date: Thu, 02 Jun 2005 19:08:56 -0700 | | Aubrey Jaffer <xxxxxx@alum.mit.edu> writes: | | > | From: Thomas Bushnell BSG <xxxxxx@becket.net> | > | 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.