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

Re: Nitpick with FLOOR etc.

This page is part of the web mail archives of SRFI 70 from before July 7th, 2015. The new archives for SRFI 70 contain all messages, not just those from before July 7th, 2015.



> From: Aubrey Jaffer <agj@xxxxxxxxxxxx>
>  | Date: Sun, 17 Jul 2005 21:43:42 -0400
>  | From: Paul Schlie <schlie@xxxxxxxxxxx>
>  | 
>  | > From: Aubrey Jaffer <agj@xxxxxxxxxxxx>
>  | >  | Date: Sun, 17 Jul 2005 13:23:26 -0400
>  | >  | From: Paul Schlie <schlie@xxxxxxxxxxx>
>  | > ...
>  | > Exact infinities are not needed for SRFI-70.
>  | > 
>  | >  |   (> #e1/0 #e10^1000 #i10^300) => #t
>  | >  | 
>  | >  |   as otherwise: (> (* #e10^1000 #e10^1000) #e10^1000)
>  | >  | 
>  | >  |   :: (> #i1/0 #e10^1000) => #f
>  | > 
>  | > That conflicts with SRFI-70, which specifies that #i+1/0 compares as
>  | > larger than any finite real number, exact or inexact:
>  | 
>  | - well, it should be clear that that's not going to work, as it would be
>  |   false for most all exact implementations.
> 
>  From SRFI-70:
>   "... an inexact real number represents not a single value, but a
>   neighborhood of (mathematical) real numbers. ... +/0. represents real
>   numbers greater than can be encoded by finite inexacts in the
>   implementation ... -/0. represents numbers less than can be encoded by
>   finite inexacts in the implementation."
> 
> One might argue that large exact numbers being within the
> +/0. interval make them `=' to it.  But that foils transitivity for
> `=':
> 
>   (= (expt 10 1000) +/0. (expt 10 999)
> 
> Large exact numbers can not be greater than +/0. because the entire
> real line is covered by inexact neighborhoods in SRFI-70.
> 
> So large exact numbers must be less than +/0..

- maybe I misunderstand, but my attempted point was that since many exact
implementations enable the representation of value of greater magnitude than
the value range that an inexact infinity begins, it seems incorrect to
define that (> #i1/0 1e1000) if #i1/0 represents all values greater than an
inexact 1e306 for example. I would presume:

 (> #i1/0 1e1000) => #f
and
 (= #i1/0 1e1000) => #f
yet
 (> #e1/0 1e1000) => #t

assuming #e1/0 were unique from #i1/0, and representing all values greater
than the representational range of an exact implementation, assuming that
all implementations of exact have some practical limit.  Thereby also:

 (>= #e1/0 #i1/0) => #f ; as #e1/0 is a subset of #i1/0, not > or =.