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

reading NaNs

 | Date: Mon, 24 Oct 2005 03:25:09 -0500
 | From: Alan Watson <a.watson@xxxxxxxxxxxxxxxx>
 | NaNs are atoms -- they have no context or stucture, just a single
 | value.

In an implementation which boxes flonums, NaNs aren't a single value;
EQ? and EQV? are *not* guaranteed to return #t given two NaNs.

 [Read-sytnax for singular objects is useful because it allows those
 objects to be put in CASE clauses.  But this works only for objects
 which match under EQV?.]

 | With the understandable exception of the eof object (and as has
 | been noted, this is exception is not universal), Lisps and Schemes
 | tranditionally provide read syntax for atoms.

Closures and continuations are atomic; R5RS provides no way to
deconstruct them.  Yet every implementation I have encountered has a
write syntax without a corresponding read syntax for them.

 | So, tradition suggests that we should have a read syntax for NaNs.

Are you suggesting a single NaN or multiple distinct NaNs?

To support existing IEEE-754 hardware, R6RS must not mandate multiple
distinct NaNs.  But specifying a singular NaN prevents implementations
from fully supporting IEEE-754 in the future.

Thus R6RS should declare that NaNs are numerical error-objects [or
condition-objects, whatever], and leave the rest to implementations.

We worked through this issue in SRFI-70.  I think SRFI-70's treatment
is Schemely, compatible with IEEE-754, and doesn't unnecessarily
constrain implementations:

  The notation 0/0 is used within this report to designate a numerical
  error-object.  A numerical function may return such an object when
  no other number (including real infinities) is the correct value.
  An implementation may report a violation of an implementation
  restriction in any calculation for which the result would be 0/0.