Re: comparison operators and *typos Aubrey Jaffer 30 Jun 2005 00:18 UTC

This thread arose on srfi-73@srfi.schemers.org, but wandered into
inexact infinities.

 | Date: Tue, 28 Jun 2005 02:38:14 -0400
 | From: Paul Schlie <xxxxxx@comcast.net>
 |
 | > From: Aubrey Jaffer <xxxxxx@alum.mit.edu>
 | >  | Date: Mon, 27 Jun 2005 18:09:04 -0400
 | >  | From: Paul Schlie <xxxxxx@comcast.net>
 | >  | ...
 | > ...
 | > My point is that (expt 0 0) is unlikely to occur when EXPT is being
 | > used as a continuous function; its occurrences will be exponentiating
 | > integers.  In the integer context, arguments about limits of
 | > continuous functions are irrelevant.
 |
 | - Typically it seem more broadly accepted that (expt 0 0) == 1
 | particularly for integers,...

Hmm... "Concrete Mathematics" p.162 (R. Graham, D. Knuth,
O. Patashnik) argues that 0^0=1 for the sake of the binomial
theorem. I will change SRFI-70 to return 1 for 0^0.

 | ...
 | >  |
 | >  | - only if it's not considered important that inexact
 | >  | infinities have corresponding reciprocals;
 | >
 | > Inexact infinities have reciprocals: zero.  Their reciprocals are
 | > not unique, but that is already the case with IEEE-754
 | > floating-point representations:
 |
 | - yes, among other idiosyncrasies.
 |
 | >   179.76931348623151e306  ==> 179.76931348623151e306
 | >   179.76931348623157e306  ==> 179.76931348623157e306
 | >   (/ 179.76931348623151e306)  ==> 5.562684646268003e-309
 | >   (/ 179.76931348623157e306)  ==> 5.562684646268003e-309
 | >
 | >  | which seems clearly desirable as otherwise any expression
 | >  | which may overflow the dynamic range of the number system
 | >  | can't preserve the sign of it's corresponding infinitesimal
 | >  | value, which if not considered important, there's no reason to
 | >  | have signed infinities, either, etc. ?
 | >
 | > #i+1/0 is the half-line beyond the largest floating-point value.
 | > The projection of that interval through / is a small open
 | > interval bordering 0.0.  That interval overlaps the interval of
 | > floating-point numbers closer to 0.0 than to any other.  Thus the
 | > reciprocal of #i+1/0 is 0.0.
 |
 | - but the problem seems to be the reciprocal of #i-1/0?

#i-1/0 is the half-line beyond the most negative floating-point value.
The projection of that interval through / is a small open interval
bordering 0.0.  That interval overlaps the interval of floating-point
numbers closer to 0.0 than to any other.  Thus the reciprocal of
#i-1/0 is 0.0.

 |   And it's reciprocal?, which should be where one began?

In IEEE-754, the reciprocal of the reciprocal is not always equal to
the original:

  (/ 179.76931348623149e306)		==> 5.56268464626801e-309
  (/ (/ 179.76931348623149e306))	==> 179.76931348623143e306
  (/ 179.76931348623151e306)		==> 5.562684646268003e-309
  (/ (/ 179.76931348623151e306))	==> #i+1/0

This can be seen as the consequence of the inexact intervals projected
through functions not aligning with the inexact intervals on the real
line.

 |   (where it one introduces -0.0 then 0.0 is implied as being +0.0
 |   leaving one with ether a + or - 0, but nothing which is either?
 |   unless one introduces yet another 0, 0 (or ~0 hypothetically,
 |   which then implies ~inf)?

Zero is at the center of 0.0's neighborhood.  R5RS division by 0.0 is
an error; leaving latitude for SRFI-70's response.  If we make
(/ +1 0.0) ==> #i+1/0, then (/ -1 0.0) ==> #i-1/0.  This choice is
arbitrary; but the other way is confusing.

Most neighborhoods mapping through functions project onto adjacent
neighborhoods.  But / near 0 is not the only function which does not.
TAN near pi/2 is another example.