Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
faq:faq7:index [2026/02/06 03:33] – created - external edit 127.0.0.1faq:faq7:index [2026/02/20 15:34] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== CUBLOC 실수연산 결과가 니다. 해결방법은? ======+====== CUBLOC 실수 연산 결과가 과 다르게 나옵니다. 왜 그런가요? ======
  
-큐블록에서는 8비트 MCU의 한계성으로 인해 32비트 실수연산을 하기 때문에, 64비트 정도 실수연산보다는 결과의 정확성이 떨어집니다. 이점을 감안하시여 프그램을 작성하시기 바랍니다.+큐블록은 8비트 MCU 기반 제품입니다.   
 +이 구조에서는 실수(소수점) 연산을 32비트 정도(float) 방식으로 처리합니다.
  
-모아콘은 32비트 ARM프로세서를 사용하기 때문에, 64비트 배정도 실수연산이 능합니다.+===== 왜 오차가 발생하나요? =====
  
-따라서 고정밀도를 요구하는 산을 요로하시는 은 을 선택해주기 바랍니다.+컴퓨터에서 소수는 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을 선택하십.
  
 [[faq:index|자주 묻는 질문 (FAQ)]] [[faq:index|자주 묻는 질문 (FAQ)]]