[C# 5.0]p.90 질문입니다.
2015-01-13
|
by reverse1990
1417
다시 복습중입니다.
처음에는 대충 넘기면서 흐름을 보았고, 이번엔 좀더 자세히 읽는중입니다.
17 float x = 0.1f;
18 Console.WriteLine("x : {0}", x);
19
20 double y = x;
21 Console.WriteLine("y : {0}", y);
22
23 Console.WriteLine("0.1 == y : {0}", 0.1 == y);
프로그램을 실행하게 되면...
x : 0.1
y : 0.100000001490116 (float을 double로 캐스트한 결과)
그 결과 당연히 0.1 == y : false가 나오게 됩니다.
0.1이랑 0.100000001490116은 다르니까요.
Console.WriteLine("0.1 == y : {0}", 0.1 == y);
이 부분을
Console.WriteLine("x == y : {0}", x == y);
이렇게 수정해보고 출력을 해보았습니다.
결과는 생각과는 다르게 x == y : true라고 나오네요...!
여기서 x에는 0.1이 저장되어 있고, y에는 0.100000001490116이 담겨있잖아요?
그럼 서로 다르니까 false가 나와야 하지 않나요?
float과 double 은 shallowcopy가 아닌 deepcopy 이니 값복사가 되어
서로 다른 값이 저장되어있을텐데 말이죠...
캐스팅에 대해서 이것저것 바꿔보다가 이런 결과가 출력이 됐네요.
왜 나오는지 문득 궁금해졌어요.