Note

Access to this page requires authorization. You can try signing in or .

Access to this page requires authorization. You can try .

Single.NaN Field

Definition

Namespace:
System
Assemblies:
mscorlib.dll, System.Runtime.dll
Assemblies:
netstandard.dll, System.Runtime.dll
Assembly:
System.Runtime.dll
Assembly:
mscorlib.dll
Assembly:
netstandard.dll
Source:
Single.cs
Source:
Single.cs
Source:
Single.cs
Source:
Single.cs
Source:
Single.cs

Important

Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.

Represents not a number (NaN). This field is constant.

public: float NaN = NaN;
public const float NaN = NaN;
val mutable NaN : single
Public Const NaN As Single = NaN

Field Value

Value = NaN

Examples

The following example demonstrates the NaN constant.

Single zero = 0;

// This condition will return false.
if ((0 / zero) == Single.NaN)
{
 Console.WriteLine("0 / 0 can be tested with Single.NaN.");
}
else
{
 Console.WriteLine("0 / 0 cannot be tested with Single.NaN; use Single.IsNan() instead.");
}
let zero = 0f

// This condition will return false.
if 0f / zero = Single.NaN then
 printfn "0 / 0 can be tested with Single.NaN."
else
 printfn "0 / 0 cannot be tested with Single.NaN use Single.IsNan() instead."
Dim zero As Single = 0

' This condition will return false.
If (0 / zero) = Single.NaN Then
 Console.WriteLine("0 / 0 can be tested with Single.NaN.")
Else
 Console.WriteLine("0 / 0 cannot be tested with Single.NaN; use Single.IsNan() instead.")
End If

Remarks

A method or operator returns NaN when the result of an operation is undefined. For example, the result of dividing zero by zero is NaN, as the following example shows. (But note that dividing a non-zero number by zero returns either PositiveInfinity or NegativeInfinity, depending on the sign of the divisor.)

float zero = 0.0f;
Console.WriteLine("{0} / {1} = {2}", zero, zero, zero/zero);
// The example displays the following output:
// 0 / 0 = NaN
let zero = 0f
printfn $"{zero} / {zero} = {zero / zero}"
// The example displays the following output:
// 0 / 0 = NaN
Dim zero As Single = 0
Console.WriteLine("{0} / {1} = {2}", zero, zero, zero/zero)
' The example displays the following output:
' 0 / 0 = NaN

In addition, a method call with a NaN value or an operation on a NaN value returns NaN, as the following example shows.

float nan1 = Single.NaN;

Console.WriteLine("{0} + {1} = {2}", 3, nan1, 3 + nan1);
Console.WriteLine("Abs({0}) = {1}", nan1, Math.Abs(nan1));
// The example displays the following output:
// 3 + NaN = NaN
// Abs(NaN) = NaN
let nan1 = Single.NaN

printfn $"{3} + {nan1} = {3f + nan1}"
printfn $"Abs({nan1}) = {abs nan1}"
// The example displays the following output:
// 3 + NaN = NaN
// Abs(NaN) = NaN
Dim nan1 As Single = Single.NaN

Console.WriteLine("{0} + {1} = {2}", 3, nan1, 3 + nan1)
Console.WriteLine("Abs({0}) = {1}", nan1, Math.Abs(nan1))
' The example displays the following output:
' 3 + NaN = NaN
' Abs(NaN) = NaN

Use the IsNaN method to determine whether a value is not a number. In general, Single operators cannot be used to compare Single.NaN with other Single values, although comparison methods (such as Equals and CompareTo) can. The following example illustrates the difference in behavior between Single comparison operators and methods.

using System;

public class Example
{
 public static void Main()
 {
 Console.WriteLine("NaN == NaN: {0}", Single.NaN == Single.NaN); 
 Console.WriteLine("NaN != NaN: {0}", Single.NaN != Single.NaN); 
 Console.WriteLine("NaN.Equals(NaN): {0}", Single.NaN.Equals(Single.NaN)); 
 Console.WriteLine("! NaN.Equals(NaN): {0}", ! Single.NaN.Equals(Single.NaN)); 
 Console.WriteLine("IsNaN: {0}", Double.IsNaN(Double.NaN));
 
 Console.WriteLine("\nNaN > NaN: {0}", Single.NaN > Single.NaN); 
 Console.WriteLine("NaN >= NaN: {0}", Single.NaN >= Single.NaN); 
 Console.WriteLine("NaN < NaN: {0}", Single.NaN < Single.NaN);
 Console.WriteLine("NaN < 100.0: {0}", Single.NaN < 100.0f); 
 Console.WriteLine("NaN <= 100.0: {0}", Single.NaN <= 100.0f); 
 Console.WriteLine("NaN >= 100.0: {0}", Single.NaN > 100.0f);
 Console.WriteLine("NaN.CompareTo(NaN): {0}", Single.NaN.CompareTo(Single.NaN)); 
 Console.WriteLine("NaN.CompareTo(100.0): {0}", Single.NaN.CompareTo(100.0f)); 
 Console.WriteLine("(100.0).CompareTo(Single.NaN): {0}", (100.0f).CompareTo(Single.NaN)); 
 }
}
// The example displays the following output:
// NaN == NaN: False
// NaN != NaN: True
// NaN.Equals(NaN): True
// ! NaN.Equals(NaN): False
// IsNaN: True
//
// NaN > NaN: False
// NaN >= NaN: False
// NaN < NaN: False
// NaN < 100.0: False
// NaN <= 100.0: False
// NaN >= 100.0: False
// NaN.CompareTo(NaN): 0
// NaN.CompareTo(100.0): -1
// (100.0).CompareTo(Single.NaN): 1
open System

printfn $"NaN == NaN: {Single.NaN = Single.NaN}"
printfn $"NaN != NaN: {Single.NaN <> Single.NaN}"
printfn $"NaN.Equals(NaN): {Single.NaN.Equals Single.NaN}"
printfn $"! NaN.Equals(NaN): {not (Single.NaN.Equals Single.NaN)}"
printfn $"IsNaN: {Double.IsNaN Double.NaN}"

printfn $"\nNaN > NaN: {Single.NaN > Single.NaN}"
printfn $"NaN >= NaN: {Single.NaN >= Single.NaN}"
printfn $"NaN < NaN: {Single.NaN < Single.NaN}"
printfn $"NaN < 100.0: {Single.NaN < 100f}"
printfn $"NaN <= 100.0: {Single.NaN <= 100f}"
printfn $"NaN >= 100.0: {Single.NaN > 100f}"
printfn $"NaN.CompareTo(NaN): {Single.NaN.CompareTo Single.NaN}"
printfn $"NaN.CompareTo(100.0): {Single.NaN.CompareTo 100f}"
printfn $"(100.0).CompareTo(Single.NaN): {100f.CompareTo Single.NaN}"
// The example displays the following output:
// NaN == NaN: False
// NaN != NaN: True
// NaN.Equals(NaN): True
// ! NaN.Equals(NaN): False
// IsNaN: True
//
// NaN > NaN: False
// NaN >= NaN: False
// NaN < NaN: False
// NaN < 100.0: False
// NaN <= 100.0: False
// NaN >= 100.0: False
// NaN.CompareTo(NaN): 0
// NaN.CompareTo(100.0): -1
// (100.0).CompareTo(Single.NaN): 1
Module Example
 Public Sub Main()
 Console.WriteLine("NaN = NaN: {0}", Single.NaN = Single.NaN) 
 Console.WriteLine("NaN <> NaN: {0}", Single.NaN <> Single.NaN) 
 Console.WriteLine("NaN.Equals(NaN): {0}", Single.NaN.Equals(Single.NaN)) 
 Console.WriteLine("Not NaN.Equals(NaN): {0}", Not Single.NaN.Equals(Single.NaN)) 
 Console.WriteLine("IsNaN: {0}", Double.IsNaN(Double.NaN))
 Console.WriteLine()
 Console.WriteLine("NaN > NaN: {0}", Single.NaN > 100.0f) 
 Console.WriteLine("NaN >= NaN: {0}", Single.NaN >= 100.0f) 
 Console.WriteLine("NaN < NaN: {0}", Single.NaN < Single.NaN)
 Console.WriteLine("NaN < 100.0: {0}", Single.NaN < 100.0f) 
 Console.WriteLine("NaN <= 100.0: {0}", Single.NaN <= 100.0f) 
 Console.WriteLine("NaN >= 100.0: {0}", Single.NaN > 100.0f)
 Console.WriteLine("NaN.CompareTo(NaN): {0}", Single.NaN.CompareTo(Single.Nan)) 
 Console.WriteLine("NaN.CompareTo(100.0): {0}", Single.NaN.CompareTo(100.0f)) 
 Console.WriteLine("(100.0).CompareTo(Single.NaN): {0}", (100.0f).CompareTo(Single.NaN)) 
 End Sub
End Module
' The example displays the following output:
' NaN == NaN: False
' NaN != NaN: True
' NaN.Equals(NaN): True
' ! NaN.Equals(NaN): False
' IsNaN: True
'
' NaN > NaN: False
' NaN >= NaN: False
' NaN < NaN: False
' NaN < 100.0: False
' NaN <= 100.0: False
' NaN >= 100.0: False
' NaN.CompareTo(NaN): 0
' NaN.CompareTo(100.0): -1
' (100.0).CompareTo(Single.NaN): 1

Applies to

See also


Feedback

Was this page helpful?