>>> (define (min n1 n2)
>>>  (cond [(<= n1 n2) n1]
>>>        [else n2]))
>> 
>> What's wrong with this is that, mathematically, since 1e100 is inexact, 
>> we're not CERTAIN it's>= 0, so the "proper" answer to (<= n1 n2) is not true 
>> but rather almost-certainly-true.  (An "inexact Boolean", if you will....)
>> 
>> When you define the function as above, the "<=" takes its best guess as to 
>> which number is really smaller and pretends that the answer is certain.
> 
> Then what is the correct definition?

I guess if you wanted to be really pedantic (and get the same answer as the 
built-in min produces), you could say

(define (min n1 n2)
   (let ((naive-min (if (<= n1 n2) n1 n2)))
      (if (and (exact? n1) (exact? n2))
          naive-min
          (exact->inexact naive-min))))




Stephen Bloch
sbl...@adelphi.edu


_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/users

Reply via email to