본문 바로가기

공부/C언어

[소수점 연산] 낮은 bit의 MCU에서의 연산 처리법

나눗셈이나 소수점 연산이 많이 필요한 MCU가 낮은 비트 연산을 하는 MCU일때, 연산 자체가 많이 느려질수가 있다. 

 

이에 따라 연산을 조금 더 빠르게 하기 위해서는 아래와 같은 방법을 사용하면된다. 

 

예를 들어 X * B/A = Y 형태의 식에서 A = 13, B = 7이라고 하면 1) X * 7/13 = Y이다.

 

이때 B/A = 7/13 이므로 나눠버리면 소수점이 나오게 된다. 

 

1) 식에서 2) X * 7/13 = X * 7 * 1/13이고, 1/13 = (약)0.077이다. 

 

2) 식에서 0.077 = 0.077 / 1이고,  예를 들어 10bit의 분해능을 가진다 하면. 0.077 / 1 * 1024 / 1024 = 78.848/1024이다.

 

약 79/1024인데 79를 1024로 나누는 것, 즉 79를 2의10승으로 나눈다. 이걸 이용하자면 C 언어에서 shift 연산자를 생각해 볼수 있다. 

 

shift 연산자는 우측으로 가면 나누기와 같고, 좌측으로 가면 곱하기와 같다. 

 

따라서 2)의 식을 C로 표현하면 X * 7 * (79 >> 10)가 된다. 하지만 이때 변수가 어떤 자료형을 가지는지 알고있어야한다.

 

Over flow가 발생하여 버그가 생길수도 있고, 소수점 아래가 버려지기 때문에 계산이 정확하지 못할 수도 있다.