나눗셈이나 소수점 연산이 많이 필요한 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가 발생하여 버그가 생길수도 있고, 소수점 아래가 버려지기 때문에 계산이 정확하지 못할 수도 있다.
'공부 > C언어' 카테고리의 다른 글
[C] naming rule (0) | 2020.08.06 |
---|---|
[C] error: multiple definition (0) | 2020.08.06 |
[C] error: undefined reference to (0) | 2020.05.22 |
[C]Warning: function declaration isn’t a prototype (0) | 2020.05.19 |
임베디드에서 공용체(union)과 구조체(struct)의 사용 (0) | 2020.02.03 |