On Sat, 23 Sep 2000, Yukihiro Matsumoto wrote:

> Hi,
> 
Hi,

> |Since we now have Float#nan? and Float#infinite? I think the following
> |constants should be added to Math (or Float?) for completeness:
> |
> |NEGINF = Math.log(-1) # Or better way of generating NEGINF...
> |INF = -NEGINF
> |NAN = INF / INF
> 
> Do you know good/portable way to generate positive/nagative infinity
> and NaN?
> 
I guess the simplest answer is that since the current interpreter relies
on isnan and isinfinite for nan? and infinite? and they, to my knowledge,
are not ANSI C I guess we could use nan() and infinity() which are also
non ANSI C (but at least show up in math.h on my cygwin "machines"). But
this will probably not work very often...

If you want to be a bit more sure you could assume the IEEE 754 floating
point standard funtions are correctly implemented and get for example
nan with: 0.0/0.0 or sqrt(negative double) or 0*inifinity or inf*inf or
inf+inf.

If you want to be even more sure you can set the bits according to IEEE
754:

S bit 0
E bit 1-11
F bit 12-63
If E=2047 and F is nonzero, then V=NaN ("Not a number") 
If E=2047 and F is zero and S is 1, then V=-Infinity 
If E=2047 and F is zero and S is 0, then V=Infinity 

I guess you may need to know the endianness but we need that info also
elsewhere in the interpreter needn't we?

If you can't assume the same representations as in IEEE 754 I guess I
can't give you a good/portable way... (I've heard that some Cray machines
still doesn't comply fully with 754...)

Regards,

Robert