메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 C# 프로그래밍

뇌를 자극하는 C# 프로그래밍 질의응답 게시판입니다.

[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 이니 값복사가 되어
서로 다른 값이 저장되어있을텐데 말이죠...

캐스팅에 대해서 이것저것 바꿔보다가 이런 결과가 출력이 됐네요.
왜 나오는지 문득 궁금해졌어요.
댓글 입력