<div dir="ltr"><div>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".</div><div><br></div><div>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</div>
<div><br></div><div>> (min 0 +inf.0)</div><div>returns 0.0, an inexact 0. This behavior is expected: <a href="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%29">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%29</a> because +inf.0 (and +inf.f) is a floating point number and thus inexact.</div>
<div><br></div><div>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.<br></div>
<div><br></div><div>(define (mymin a b)</div><div>  (if (< a b) a b))</div><div><br></div><div>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</div>
<div><br></div><div>(1 . / . +inf) ==> 0</div><div>(min 34 +inf) ==> 34</div><div><br></div><div>-Max Stewart New<br></div>
</div>