[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: +nan.0 problems
| From: Thomas Bushnell BSG <tb@xxxxxxxxxx>
| Date: Sat, 22 Oct 2005 17:51:06 -0700
| Aubrey Jaffer <agj@xxxxxxxxxxxx> writes:
| > | From: "Marcin 'Qrczak' Kowalczyk" <qrczak@xxxxxxxxxx>
| > | Date: Sat, 22 Oct 2005 20:52:50 +0200
| > |
| > | Aubrey Jaffer <agj@xxxxxxxxxxxx> writes:
| > |
| > | > The total order of the reals is a crucial property for many
| > | > applications. Any subset of the reals has a total order.
| > | > The reals with +inf.0 and -inf.0 have a total order.
| > | >
| > | > But the reals with +inf.0, -inf.0, and +nan.0 do not have a total
| > | > order [because (<= 5 +nan.0) and (>= 5 +nan.0) would both be false].
| > |
| > | It is well known that the default order on the floating point
| > | approximation of reals is not total.
The floating-point approximations to the reals do not include NaN.
(which real number would it be approximating?)
| > From Wikipedia, the free encyclopedia.
| > <http://en.wikipedia.org/wiki/Total_order>
| > In mathematics, a total order, linear order or simple order on a set
| > X is any binary relation on X that is antisymmetric, transitive, and
| > total. This means that, if we denote the relation by <=, the
| > following statements hold for all a, b and c in X:
| > if a <= b and b <= a then a = b (antisymmetry)
| > if a <= b and b <= c then a <= c (transitivity)
| > a <= b or b <= a (totalness)
| > Which condition does it violate?
| Totalness (as Marcin said). NaN comparisons (other than
| not-equals) always evaluate false.
My point exactly! NaN violates totalness. Thus it is not a real
Having (real? +nan.0) ==> #f and +nan.0 be an illegal argument to >,
<, <=, and >= is compatible with IEEE-754. Just because IEEE-754
defines a behavior for comparisons with NaN doesn't mean Scheme must
redefine <, ... so that it accepts non-real arguments. Scheme already
has lots of non-real numbers which are illegal arguments to >:
(> 5 5.+3.i)