2016-11-25 18 views
2

정확도가 x == 0x == 90 또는 x == pi/2 인 사인의 근사값을 찾고 있는데 그 외에는 5 % 이내입니다.사인의 간단한 근사

나는 룩업 테이블을위한 공간이 없다.

+4

표준 sin 함수의 문제점은 무엇입니까? –

+1

Taylor 시리즈 –

+1

을 사용하여 근사치를 구현할 수 있습니다. 코딩 서비스가 없으며 라이브러리 권장 사항은 여기에서 언급되지 않습니다. – Olaf

답변

11

당신은 Bhaskara I's sine approximation formula를 사용할 수있을 것 :

float x; 
float sinx = 4 * x * (180 - x)/(40500 - x * (180 - x)); 

오류는 2 % 내에서 유지됩니다.

매우 빠르고 (손으로) 최적화 할 수 있습니다.

+3

그렇지 않으면 5 % 이내 *라고 말합니다. – Kh40tiK

+0

@ Kh40tiK 내가 잘못 읽었습니다 (목적 :-) 여기에 더 좋은 대답이 있습니다. –

1

내가 이것을 할 수있는 유일한 방법은 Taylor/Maclaurin Expansions을 사용하는 것입니다.

이들은 함수에 대한 근사적인 근사를 나타내는 다항식을 형성합니다.

일반적으로 Taylor 시리즈를 통해 근사치를 계산하려는 함수의 값을 선택합니다.

예를 들면 x = 0 라디안 sin(x) = x - x^3/3! + x^5/5!입니다. 시리즈는 무한하며 더 많은 용어를 포함 시키면 얻을 수있는 진정한 가치에 더 가까워집니다.

"편리한"장소 (30, 60, 45, 90도)에서 이러한 테일러 확장 중 몇 가지를 만들어야 할 수도 있습니다. 그리고 각도가 가장 가까운 함수를 사용하십시오.

+0

"그런 다음 각도가 가장 가까운 기능을 사용하십시오." - 그래서 ... 조회 테이블처럼? ;-) –

+0

그럼 이런 식으로 저장할 필요가 없습니다. 그냥 4 개의 함수를 정의하고 어떤 함수를 호출할지 결정하기 위해'if'를 정의하십시오. – James

3

sin의 미분은 cos이며 1이 아니며 5 %가 1/20이므로 20 * pi/2 = 32 점을 가진 찾아보기 표가 요구 사항을 충족시킵니다. RAM을 32 바이트까지도 저장할 수 없습니까?

+0

총 64 또는 1KB RAM이 있습니다. – fadedbee

+0

그 중 얼마가 무료입니까? –

+0

@ 의미 - 귀하의 답변은 멋지지만 귀하의 의견은 * my * 답변에 대한 토론에 기여하지 않으며 자기 홍보의 목적에만 기여합니다. –

0

빠른 선형 맞춤으로 발견되었습니다.

1.00003 x - 0.000312267 x^2 - 0.165537 x^3 - 0.00203937 x^4 + 0.010286 x^5 - 0.000961693 x^6 

이 최대 오차는 3 %입니다.

+0

고마워,하지만 이것은 Bhaskara I의 사인 근사법과 경쟁적입니까? 그것은 12 곱셈을 필요로하는 것처럼 보입니다. 그러나 Bhaskara 's는 나누기를 필요로합니다. – fadedbee

+0

@chrisdew 확실히 싫은 데, 왜냐하면 나는 그것을 찾지 못했기 때문이다. :) – Kh40tiK

+0

@chrisdew 또한 12 개의 멀티가 필요 없다. 단지 a + x * (b + x * (c + x * (...))' – Kh40tiK