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

Re: Nitpick with FLOOR etc.



 | Date: Mon, 18 Jul 2005 14:40:40 -0400
 | From: Paul Schlie <schlie@xxxxxxxxxxx>
 | 
 | > From: Aubrey Jaffer <agj@xxxxxxxxxxxx>
 | >  | Date: Sun, 17 Jul 2005 23:24:49 -0400
 | >  | From: Paul Schlie <schlie@xxxxxxxxxxx>
 | >  | 
 | >  | > From: Paul Schlie <schlie@xxxxxxxxxxx>
 | >  | >> The possibility that systems may implement exact infinities rules out
 | >  | >> having the error be with INEXACT->EXACT (passed real infinities).
 | >  | 
 | >  | - maybe that implies that infinities and their reciprocals are in a
 | >  | class by themselves, as neither are warranted to have some minimal
 | >  | precision, as both exact and inexact representations have, but
 | >  | rather represent an underflow of the minimal precision otherwise
 | >  | warranted, thereby effectively representing the bounds of an
 | >  | implementation's exact/inexact representations?
 | > 
 | > Infinity as a number is not what SRFI-70 is about.  In it, inexact
 | > numbers are real neighborhoods and inexact infinities are real
 | > half-lines.  These semantics seem to be working well; but they are not
 | > applicable to exact numbers.
 | > 
 | > See SRFI-73 for infinity-as-number.
 | 
 | sorry, I think I was partially responding within the context of:
 | 
 |   | > That conflicts with SRFI-70, which specifies that #i+1/0 compares as
 |   | > larger than any finite real number, exact or inexact:
 | 
 | which implied a relationship between an inexact infinity and exact
 | values which is not generally true,

Sure it is.  Large exact values fall within the real half-line which
is #i+/0.

  (exact->inexact (expt 10 1000)) ==> #i+/0

For finite neighborhoods, calculations and comparisons are done with
the nominal value near the center of the neighborhood.  What nominal
value should be used for the #i+/0 neighborhood?  The worst choice is
the border value for the half-line.  For flonum calculations we can
use IEEE +inf; it has the correct behavior in comparisons and
calculations.

Combinations of #i+/0 with exact numbers can convert to inexact before
operating.  This does not lose all sensitivity to number size:

  (- (/ 0.0) (expt 10 400)) ==> #i0/0

Alternatively, exact numeric operations could be modified to treat
#i+/0 as an infinitely large number.

 | >  | Merely indicating the value was greater in magnitude than the
 | >  | greatest representable inexact value, but less than the
 | >  | greatest representable exact value, but without a minimally
 | >  | sufficient resolvable precision?
 | >  | 
 | >  | Implying something along the line of:
 | >  | 
 | >  |   #e-1/0     ..  #e-xxx  ..      #e-0/1 0  ...
 | >  |     |     |                   |     |   |
 | >  |        #i-1/0 .. #i-xxx .. #i-0/1       0  ...

In such a system, #i+/0 is just another finite neighborhood.  But its
rules are more complicated than as an infinity.

There will be some value M such that (* M #i+/0) ==> #e+/0.

And new conumdrums:
(/ #e+/0 M) ==> ??
(/ #i+/0 M) ==> ??
(* #i+/0 #i+/0) ==> ??