## digitalmars.D - Check floats for .nan

• Acarion (7/7) Oct 07 2007 I have this code:
• BCS (7/16) Oct 07 2007 IIRC this will also pass:
• Daniel Keep (4/19) Oct 07 2007 You can also use (x!=x) to test to see if x is NaN, and (x==x) to make
• Janice Caron (5/6) Oct 07 2007 Are we really sure about that?
• Nathan Reed (5/13) Oct 07 2007 I believe you'd get a type error in that case (real and creal can't be
• Sean Kelly (7/22) Oct 07 2007 I tend to use:
Acarion <asdfa asf .com> writes:
```I have this code:

float number=getFloat();
assert(number!=float.nan); //this passes
assert(to!(char[])(number)!="nan"); //this fails
writefln(string.toString(number)); //this outputs: "nan"
writefln( to!(char[])(to!(long)(number)) ); //this generates an error

What did I do wrong?
```
Oct 07 2007
```Reply to acarion,

I have this code:

float number=getFloat();
assert(number!=float.nan); //this passes

IIRC this will also pass:

assert(float.nan != float.nan);

this is because D used IEEE floating point semantics. Under IEEE a comparison
with NaN will always be  not equal

If you want to test for nan use "testedValue !<>= 0"* or the isnan function

assert(to!(char[])(number)!="nan"); //this fails
writefln(string.toString(number)); //this outputs: "nan"
writefln( to!(char[])(to!(long)(number)) ); //this generates an error
What did I do wrong?

* this is the not grater than, less than, or equal to operator.
```
Oct 07 2007
Daniel Keep <daniel.keep.lists gmail.com> writes:
```BCS wrote:

I have this code:

float number=getFloat();
assert(number!=float.nan); //this passes

IIRC this will also pass:

assert(float.nan != float.nan);

this is because D used IEEE floating point semantics. Under IEEE a
comparison with NaN will always be  not equal

If you want to test for nan use "testedValue !<>= 0"* or the isnan function

You can also use (x!=x) to test to see if x is NaN, and (x==x) to make
sure it is not NaN.

-- Daniel
```
Oct 07 2007
```On 10/7/07, BCS <ao pathlink.com> wrote:
If you want to test for nan use "testedValue !<>= 0"

Are we really sure about that?

If testedValue is complex (with non-zero real part) then it will not
be less than 0, it will not be greater than zero, and it will not be
equal to zero. But it will also not be NaN.
```
Oct 07 2007
Nathan Reed <nathaniel.reed gmail.com> writes:
```Janice Caron wrote:
On 10/7/07, BCS <ao pathlink.com> wrote:
If you want to test for nan use "testedValue !<>= 0"

Are we really sure about that?

If testedValue is complex (with non-zero real part) then it will not
be less than 0, it will not be greater than zero, and it will not be
equal to zero. But it will also not be NaN.

I believe you'd get a type error in that case (real and creal can't be
directly compared, etc.)  Haven't tried it though.

Thanks,
Nathan Reed
```
Oct 07 2007
Sean Kelly <sean f4.ca> writes:
```BCS wrote:

I have this code:

float number=getFloat();
assert(number!=float.nan); //this passes

IIRC this will also pass:

assert(float.nan != float.nan);

this is because D used IEEE floating point semantics. Under IEEE a
comparison with NaN will always be  not equal

If you want to test for nan use "testedValue !<>= 0"* or the isnan function

I tend to use:

testedValue !<>= testedValue

Though I've occasionally wondered whether the 'is' identity operator
should work for checking against nan:

testedValue is float.nan

Sean
```
Oct 07 2007