# Boost :

Subject: Re: [boost] New Boost.XInt Library, request preliminary review
From: Scott McMurray (me22.ca+boost_at_[hidden])
Date: 2010-04-02 14:07:03

>
> Yes, by that definition it's definitely a number. But it's not a
> *countable* number, which is the definition that I was using. :-) In
> relation to the XInt library, I'd say that an infinity value should also
> be counted as a not-a-number, in that an is_nan function should return
> true for it
>

Well, iirc some infinities are countable and others are not, but...

I think is_nan(Inf) should be false, but is_finite(Inf) should also be false.

>
> it's not something that can be calculated with, generally.
>
> [...]
>
> If I don't add an infinity value, I could. I'm leaning toward adding one
> (with sign), but it will act exactly like a NaN except for comparisons.
>

Actually, you *can* calculate with infinity. That's the reason for
having it separate from NaN, and why it needs a sign. Any operation
with NaN gives a NaN, but at least the following for Infs don't give
NaNs (for any x, y where is_finite(x) && !is_nan(y)):

-(Inf) => -Inf
-(-Inf) => Inf
x + Inf => Inf
x - Inf => -Inf
x % Inf => x
Inf + Inf => Inf
-Inf - Inf => -Inf
x < Inf => true
x > -Inf => true
y <= Inf => true
y >= -Inf => true
x / Inf => 0
x / -Inf => 0
if (y != 0) y * Inf => sign(y)Inf
if (y != 0) y * -Inf => sign(-y)Inf

But the indeterminate forms do, of course, give NaNs:

Inf - Inf => NaN
-Inf + Inf => NaN
0 * Inf => NaN
0 * -Inf => NaN
Inf / Inf => NaN
Inf / -Inf => NaN
Inf % y => NaN

Hopefully that'll make you lean further :P