2014-06-05 3 views
1

각도 = 아크 탄젠트 아크 탄젠트 사용 (32 비트), 더블 (64 비트)그리고 dsPIC33 또는 PIC24, 나는 궁금 얼마나 정확한 플로트 (/ BX에 의해)

알고하는 방법 Math.h 라이브러리에 의해 삼각 계산을 위하여 정확 방정식.

설명서를 읽었으며 정확성을 분명히하지 않았습니다. Google 검색을 살펴 보았지만 명확한 대답은 없습니다.

분자 (BY)가 작고 분모 (BX)가 큰 0deg 방향으로 By/BX 항이 낮은 값을 갖는 경우 float (32 비트) 및 double (64 비트)가 어떻게 영향을 받는지 이것에 의해서?.

64 비트가 더 정확하지만이 dsPIC33 또는 PIC24 MCU는 32 비트와 64 비트 부동 소수점 (0deg - 90deg) 사이의 성능 차이를 알아야합니다.

올바른 계산을 위해 arctan을 사용하는 법칙이 있습니까? 한 소식통은 각 1/8 세그먼트에 0deg ~ 45deg (0 ~ pi/4)로 작업 할 것을 제안합니다. 이것은 arctan보다는 tan에만 적용됩니다. 맞습니까?

+0

부동 소수점 숫자는 0에 가까운 숫자를 정확하게 나타냅니다. –

답변

0

IEEE 표준은 모든 FP 명령어에 대해 최대 상대 정확도가 필요합니다. 즉, 가수의 마지막 비트를 제외한 모든 비트가 정확해야합니다 (이전 비트의 캐리 효과 무시).

부서를 수행하는 동안 정밀도가 떨어지지 않으려면 (가능한 경우)? atan2 기능을 사용할 수있는 경우 사용하십시오.


업데이트 : 당신은 이론적으로 올바른 버전에서 제공되는 기능을 테스트하려면, 당신은 이등분하고 부문의 값에 대한 아크 탄젠트의 테일러 시리즈를 사용하는 다음 알고리즘을 사용할 수 0<x && |y|<x

partial_atan2(y,x) { 
    r = sqrt(x*x+y*y); 
    c = x/r; 
    s = y/r; 
    repeat 4 times { 
     c = sqrt((1+c)/2); 
     s = s/(2*c); 
    } 
    t = s/c; 
    t2 = t*t; 
    pow = -t2; 
    sum = 1; 
    k = 3; 
    while 1+abs(pow) > 1 { 
     sum = sum + pow/k; 
     pow = -pow*t2; 
     k = k+2; 
    } 
    return 16*t*sum; 
} 
+1

첫 번째 문장을 IEEE 754 표준에 대해 이해하는 데 어려움을 겪고 있습니다. 첫째, IEEE 754 표준은 일부 연산이 올바르게 반올림되어야 함을 의미합니다. ** 결과의 생성을 암시하지 않는 "올바른"의미를 위해 유효 숫자의 ** 비트 **가 모두 정확함을 의미합니다. 표현. 현재의 상태에서 정확하게 반올림 될 필요가없는 초등 함수는 정확성 요구 사항이 전혀 없지만 "충실"(정확도 1 ULP)이 좋은 절충안이므로 권장됩니다. –

+1

올바른 비트 수에 대한 정확도 표현은 혼란 스럽습니다 (예 : 0.111111 및 1.000000은 모든 7 자리 숫자가 다르지만 2^-6 만 다른 숫자를 나타냄). 펜 및 페이퍼 계산에는 적합했지만 더 이상 정확도의 단위로 사용하지 않아도됩니다. –

+0

@ PascalCuoq : 기술적으로보다 정확한 의견을 답변으로 게시하면 답변을 취소합니다. – LutzL