https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/166755
DSP28335는 C2000계열의 32bit processor 이다.
실수연산에서 float과 double을 구분하지 않으며 둘 다 32bit 변수로 취급된다.
그리고 sin, cos 등 삼각함수를 포함하여 제공되는 연산 함수들이 모두 32bit 기준으로 되어있다.
64bit 실수를 다루기 위해서는 float64라는 변수를 다루어야 하며, 실제 자료형은 long double로 되어있다.
하지만 위 변수에 값을 대입할때, double에서 하던것처럼 그냥 대입했을 경우, 정밀도가 떨어진 값이 대입된다.
예를들어
double A = 3.141592653589793;
float64 B = 3.141592653589793;
의 경우 디버깅을 하면
A : 3.141592653589793
B : 3.141592741012573
과 같은 결과를 얻게 된다.
이 때는 다음과 같이 해결한다.
float64 B = 3.141592653589793L;
대입할 때, 대입하는 값의 자료형을 제대로 명명해야 하는 것이다. 32bit 프로세서이기 때문에 그냥 대입하면 32bit기준으로 대입이 이루어 져서 그런것이 아닐까?
sin, cos등의 함수들이 모두 32bit기준으로 되어있기 때문에 함수에 float64 데이터를 인자로 넣으면 32bit double로 형변환이 일어난다.
이것들은 직접 필요한 함수를 구현할 수 밖에 없을듯 하다.
'기타 > 문제해결기' 카테고리의 다른 글
Android/AwContents﹕ nativeOnDraw failed [출처] [webview(웹뷰)] W/AwContents﹕ nativeOnDraw failed; clearing to background colo (0) | 2017.02.02 |
---|---|
Android/Suppressed StrictMode policy violation on screen rotation (0) | 2017.02.02 |
MCU Uart 셋팅시 고려사항 (0) | 2016.02.01 |
CC3000 Inactivity timeout (0) | 2015.10.09 |
matlab의 cos(pi/2)가 너무 길게 나온다! (0) | 2015.03.19 |