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자리까지 정밀하게 표현할 수 있습니다.

따라서 다음과 같은 경우에는 오차가 더 크게 느껴질 수 있습니다.

  1. 아주 작은 소수 단위까지 계산해야 하는 경우
  2. 누적 계산을 반복하는 경우
  3. 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을 선택하십시오.

자주 묻는 질문 (FAQ)