NaN
Not a Number 의 줄임말.
숫자가 아니다.
즉, 잘못된 입력을 받았음을 나타내는 기호이다.
예를 들면, 3 나누기 0의 결과는 NaN으로 표기된다.
아래 예제를 봐보자.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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 | cs |
위 예제는
Microsoft Developer Network에서 설명하고 있는 샘플 예제이다.
이중에
'==' 연산자로 비교한 결과를 보면,
Single.NaN == Single.NaN 의 결과는
NaN == NaN: False 이다.
Single.NaN != Single.NaN 의 결과는
NaN != NaN: True 이다.
대표적으로 착각하기 쉬운 결과값이다.
이외에도 >, >=, <, <=, ... , CompareTo() 까지..
위의 다른 결과값을 확인하고
유의하며 사용하자.
참조 사이트
위키피디아(NaN 정의 참조) : https://ko.wikipedia.org/wiki/NaN
Microsoft Developer Network(Single.NaN 설명) : https://msdn.microsoft.com/ko-kr/library/system.single.nan(v=vs.110).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1