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

Re: Nitpick with FLOOR etc.

 | Date: Wed, 27 Jul 2005 08:55:59 -0700 (PDT)
 | From: bear <bear@xxxxxxxxx>
 | In practical terms, I think that "infinity" as it's being
 | discussed here is properly an error object rather than a
 | numeric value, and I would be satisfied with a scheme
 | where numeric operations returned an error object if asked
 | to do anything involving a range overflow, underflow, or
 | where an argument were an error object.

0/0. is an error object (SRFI-70 calls it an error waiting to happen),
but +/0. and -/0. behave differently from error objects when inverted:
(/ +/0.) ==> 0.0; and in numerical comparisons.

 | But naming an error object "infinity" is misleading, since the
 | value the user sees may be nine or ninety operations further down
 | the pipeline after the "overflow" has been divided, subtracted,
 | inverted, etc.

Inverting +/0. or -/0. returns 0.0.  So the name "error object"
wouldn't seem to apply either.

 | This brings up an important distinction in "infinities;"
 | When you divide by exact zero you get an absolute infinity.
 | (which, perversely, is neither positive nor negative, because
 | exact zero isn't positive or negative.) Call this EO1.

We have already covered this ground.  Division by zero is undefined;
SRFI-70 extends division by returning infinities in these cases:
(/ -5. 0) ==> -/0.; (/ 1. 0) ==> +/0., which are consistent with
the one-sided limits:

(limit / 0 1.0e-9)                              ==> +/0.
(limit / 0 -1.0e-9)                             ==> -/0.

 | When you divide 1 by (say) 5e-323, you get a different kind of
 | EO, which is "results too large to represent" but which
 | is often mistaken for an actual infinity.   Call this EO2.

The result of division by zero was chosen to be the same as the result
of (/ 1 5e-323).  We could split +/0 into any number of regions.  One
was chosen, which happens to be supported by IEEE-754.