Table of Contents
CUBLOC 실수 연산 결과가 예상과 다르게 나옵니다. 왜 그런가요?
큐블록은 8비트 MCU 기반 제품입니다. 이 구조에서는 실수(소수점) 연산을 32비트 단정도(float) 방식으로 처리합니다.
왜 오차가 발생하나요?
컴퓨터에서 소수는 2진수로 변환되어 계산됩니다. 이 과정에서 일부 숫자는 정확히 표현되지 못하고 근사값으로 저장됩니다.
예를 들어,
0.1 + 0.2
를 계산했을 때 결과가 0.3000000 이 아니라 0.2999999 처럼 보일 수 있습니다.
이는 제품 불량이 아니라, 32비트 실수 연산 방식의 구조적인 특성입니다.
32비트와 64비트의 차이
- CUBLOC → 32비트 단정도(float)
- MOACON → 64비트 배정도(double)
32비트는 약 7자리 정도의 정밀도를 가지며, 64비트는 약 15자리까지 정밀하게 표현할 수 있습니다.
따라서 다음과 같은 경우에는 오차가 더 크게 느껴질 수 있습니다.
- 아주 작은 소수 단위까지 계산해야 하는 경우
- 누적 계산을 반복하는 경우
- PID, 보정계수, 계측 연산 등 고정밀 계산
어떻게 대응해야 하나요?
1) 가능하면 정수 연산으로 처리하세요.
예: 12.34 대신 1234로 계산 후 마지막에 /100
2) 비교 연산 시 == 대신 범위 비교를 사용하세요.
예: If A > 0.299 And A < 0.301 Then
3) 고정밀 연산이 반드시 필요한 경우에는
32비트 ARM 기반의 MOACON을 사용하십시오.
MOACON은 64비트 배정도 실수 연산을 지원하므로 정밀도가 크게 향상됩니다.
정리
- CUBLOC의 오차는 제품 이상이 아닙니다.
- 8비트 MCU의 구조적 특성입니다.
- 일반 제어용으로는 충분한 정밀도입니다.
- 고정밀 계산이 필요하면 MOACON을 선택하십시오.
