오늘은 튜터님과 진행 상황 공유, 모의 면접을 진행했다.
튜터님들과 진행 상황을 공유하면서, 의외로 우리가 진행 속도가 빠른 편이라는 것을 알 수 있었다. 그러나 그와는 별개로, 나는 아이템의 종류 추가, 공격 시 효과 추가 등 할 일이 많다...
튜터님께 해당 질문을 드렸더니, 튜터님께서 모바일 게임의 경우 SDK가 굉장히 많이 붙기 때문에, 해당 SDK들끼리의 호환성의 문제로 인해 빌드 에러가 많이 발생한다고 한다. 또한 모바일 기기는 리소스가 한정적이기 때문에, 잦은 메모리 참조, 저장 등은 피해야 한다고 하셨다.
또한 현업에서는 모바일 게임의 테스트를 어떻게 진행하는 지에 대해서도 질문을 드렸는데, 오래된 폰을 활용하여 테스트를 한다고 하셨다. 또한 해상도가 다른 핸드폰 5가지 이상으로 해상도에 대해 테스트한다고 하셨다.
오늘 내가 받은 질문은 int형과 float형의 수의 표현 가능 범위가 다른 이유에 대한 질문이었다.
이 질문 자체는 float가 부동 소수점으로 수를 표현하기 때문에, 수를 메모리에 저장하는 방식이 달라서 표현 가능한 수의 범위가 다르다고 답변을 했다.
그러나 튜터님께서 그 이후로 float에서 오차가 발생하는 이유에 대해 물어보셨다. 이에 관해서 나는 단순히 지수부와 가수부로 수를 표현을 할 때, 표현 가능한 범위가 넘어서면 오차가 발생한다고 생각해 답변을 했다.
튜터님께서 float에서 오차가 발생하는 이유는 컴퓨터가 2진수로 수를 표현하기 때문이라고 말씀하셨다. 부동 소수점의 표현 방식에 문제가 있는 것이 아니라, 컴퓨터가 수를 2진수로 저장을 하기 때문에, 2의 거듭 제곱으로 표현 불가능한 소수점 이하의 수들은 완전히 정확한 값으로 표현이 불가능하다고 말씀하셨다. 따라서 컴퓨터에서는 해당 값들을 저장하기 위해 근사치로 값을 저장하게 되는데, 예를 들어 0.1은 2의 거듭 제곱의 합으로는 표현이 불가능한 수이기 때문에, 근사치로 값을 저장하게 된다. 따라서 컴퓨터는 온전한 0.1을 저장할 수 없는 것이고, 이로 인해 오차가 발생하는 것이다.
프로그래밍에서 float형끼리 값을 비교를 할 때는 앞서 언급한 오차로 인해 서로 같은 값인지 비교가 불가능하다. 따라서, 두 수의 차가 상정한 오차 범위 내라면 같은 것으로 처리하는 등의 방법을 통해 float형으로 인해 발생하는 오차들을 상정하고 코드 작성을 해야 한다.
오늘 모의 면접은 거의 압박 면접 수준으로 진행되었다. float를 사용하면 오차가 발생하는 이유에 대해 물어보셨을 때는 주저리 주저리 하느라 내가 뭔 말을 하는지도 모를 정도... 이게 압박 면접인가 싶었다. 확실히 준비를 해야겠다.