[racket] Exact Infinity?

From: Robby Findler (robby at racket-lang.org)
Date: Tue Mar 4 13:24:28 EST 2014

I think that Neil \bot posted on this subject in this forum at some point
with a fairly optimistic message.

Robby



On Tue, Mar 4, 2014 at 11:54 AM, J. Ian Johnson <ianj at ccs.neu.edu> wrote:

> It's a bit of a philosophical problem to have an "exact" infinity. Writing
> your own such wrappers should not be too much work. I've done similar
> constructions in my own work in analysis, simply using the symbol 'ω for
> infinity.
> -Ian
> ----- Original Message -----
> From: "Max New" <maxsnew at gmail.com>
> To: users at racket-lang.org
> Sent: Tuesday, March 4, 2014 12:08:03 PM GMT -05:00 US/Canada Eastern
> Subject: [racket] Exact Infinity?
>
>
>
>
> I've been doing some work that uses a data structure that includes a size
> that can be either a Natural number of Infinity ,a so-called "extended
> natural number".
>
>
> I've been using +inf.0 and gotten by using `<` and `infinite?` and things
> have worked fine out of the box but now I need to take the minimum of such
> numbers, but
>
>
> > (min 0 +inf.0)
> returns 0.0, an inexact 0. This behavior is expected:
> http://docs.racket-lang.org/reference/generic-numbers.html?q=inf&q=min&q=min&q=list/c&q=-%3E&q=define/contract#%28def._%28%28quote._~23~25kernel%29._min%29%29because +inf.0 (and +inf.f) is a floating point number and thus inexact.
>
>
> I need to use exact naturals throughout however, so I can write a wrapper
> that takes the floor of the number after a call to min or I can define my
> own min that returns the original arguments.
>
>
>
> (define (mymin a b)
> (if (< a b) a b))
>
>
> But would it be useful if exact infinities were added to the numeric
> tower? I'll call them +inf and -inf. Most operations like +, * etc could be
> defined easily though you would probably also want to add an "exact" nan
> for say (+ +inf -inf). The operations would work exactly the same way they
> do for inexact infinities, except returning exact numbers when possible, so
> for example
>
>
> (1 . / . +inf) ==> 0
> (min 34 +inf) ==> 34
>
>
> -Max Stewart New
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
> ____________________
>   Racket Users list:
>   http://lists.racket-lang.org/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140304/45417ad6/attachment-0001.html>

Posted on the users mailing list.