brunch

You can make anything
by writing

C.S.Lewis

by 이남주 NJ Namju Lee Feb 09. 2020

Precision 그리고 Design

QnA

워크숍 영상 정말 잘 보고 있습니다. 그런데 제가 공부하던 중에 포인트를 생성하는 point 3d와 point 3 f? 이 두 개의 차이를 잘 모르겠더라고요ㅠ.


피드백 감사합니다. 설명을 드리면, Rhino Common API에서 Point3d와 Point3f는 d와 f 즉 , 어떤 데이터 형식으로 포인트를 만들 것이냐에 대한 이야기예요. 즉 double 데이터를 바탕으로 하는 Point 3을 생성할 것인가? 아니면 float 데이터 형식을 취하는 Point 3을 만들 것인가에 대한 이야기예요. 비디오에서 설명해 드렸다시피, 라이노는 Point 3d를 추천해드려요. 왜냐면 아무래도 설계 툴이기 때문에, 높은 적확성(precision)으로 하면 유리하겠죠.


반면에, 게임 영역, Unity 같은 경우는 Point3f를 주로 사용해요, 즉 게임 같은 경우는 double 만큼의 정확성을 유지할 필요가 없기 때문이죠. 사실 double이던 float이던 어느 정도의 정확도는 보증하지만, 설계 툴에서는 관례상 double 타입을 주로 쓰죠. 또한 Real Time Graphics 같은경우 초당 60 혹은 90번 이상의 loop를 통해서, 그 안에 굉장히 많은 계산들이 이루어지는데, 굳이 필요 이상의 정확도를 쓸 필요는 없겠죠.


메모리 차원으로 보면, double 8 Byte를 할당하고, float 같은 경우는 4 Byte를 메모리에 할당해요. 사실 디자이너 측면에서 이런 부분들을 고려할 필요는 없겠지만, 알아두면, 중장기적으로 더 유리하고 바른 개발 형식을 취할 수 있어요. 쓸 때 없이 메모리를 많이 차지해서, 공간을 낭비하거나, 속도를 저하 시킬 필요가 없기 때문이죠.


계산 관점에서 이야기를 하면, 우리가 int 타입, 즉 1 , 2 ,3 이러한 숫자들은 비교적 간단하고 명확하지만, 3.3333...처럼 무한대로 나가는 경우도 있고, 때로는 0.000001 이상의 작은 숫자들을 가지고 계산을 해야 하는데, 이러한 부동 소수점의 계산 시에, Percision이 낮을 경우에는 계산상의 오류가 반드시 생기기 마련이죠. 이런 작은 오류들이 문제가 안 되는 경우도 있지만, 때로는 엄청난 문제를 야기하는 경우도 생겨요. 가령 사람을 태운 로켓트나 비행기를 운행할 때, 혹은 몇 억 혹은 백억 광년 떨어진 별들을 관측할 때 이런 에러들은 굉장히 치명적이고, 말도 안 되는 결과 값을 가지고 오죠.


그렇다고 무조건 메모리를 높이는 것이 해결책은 아니에요. 왜냐면 컴퓨터는 유한의 자원을 토대로 계산을 하는 것이기 때문에 그렇죠. 따라서, 그 계산이 뭐냐에 따라서, long double(12byte)이라는, double 보다 정확도가 높은 데이터 타입도 존재해요. 더 극단적인 이야기로는 숫자 자체의 오류를 완전히 제거하기 위해서 숫자 자체를 문자로 치환해서 저장하고 운영하는 경우도 있어요. 예를 들면 주식 혹은 은행 같은 경우죠. 숫자가 커지고 계산을 반복했다고 해서, 돈의 액수가 바뀌면 난리가 나겠죠. 아무도 은행의 신뢰하지 않을 거고, 그 시스템은 의미가 없어지겠죠.


이렇게 내가 어떤 영역에 적용할 것이냐를 먼저 고민해야 하는데, 디자인의 관점에서는, 특별히 건축은 cm의 영역이고. 그러한 Percision의 경우에는 double을 사용하더라도 충분하다고 볼 수 있어요.



이남주

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari