2017-01-11 3 views
-1

x<=1을 알고있는 경우 sqrt(float32bit x)을 근사하는 방법은 무엇입니까?알려진 0 <= x <= 1 인 square_root (x)의 근사값

x<=1 범위를 이용하려면 몇 가지 트릭이 있어야합니다.

반환 결과가 정확하지 않아도 최대 오류는 <0.001 일 수 있습니다.

나는 언어를 신경 쓰지 않는다 (0.001 그냥 매직 넘버, 당신은. 그것을 변경할 수),하지만 난 CPU의 (안 GPU), C++를 선호합니다.
나는 명시적인 공식이 테이블 룩업보다 낫다고 생각한다.

내 3D 게임 (VS 2015 + Ogre3D + Bullet)의 입자에 유용하며 이에 대한 단서를 찾을 수 없습니다.
내가 downvote 폭풍의 이유는 그것이 할당/인터뷰처럼 보인다는 것을 의심?
... 또는 해결책은 이미 잘 알려져 있습니까?

+1

[빠른 역 제곱근] (https://en.wikipedia.org/wiki/Fast_inverse_square_root)을 확인하십시오. –

+0

@Mark Ransom 플랫폼 의존적입니까? – javaLover

+0

@javaLover 그 트릭의 효율적이고 표준을 따르는 구현은 없지만 비교적 이식성이 뛰어납니다. –

답변

2

제곱근은 일반적으로 FSQRT which getting increasingly faster을 통해 계산됩니다. 실제로 구타 할 수없는 단일 명령입니다. 예를 들어, 빠른 역 제곱근은 결과를 직접 사용할 수 있어야 도움이됩니다. 다시 반전해야한다면 FDIV만으로 FSQRT만큼 오래 걸릴 것입니다.

+0

감사합니다. 그것은 귀중한 정보입니다! 이제 나는이 일을 찾는 것을 멈추게 될 것이다. – javaLover

+0

역 제곱근을 사용하기 위해 나눌 필요가 없습니다. '1/(1/√x)'=='x * (1/√x)'. –

+0

@javaLover 당신이 찾는 것을 멈추기 전에 [왜 SSE 스칼라 sqrt (x)가 rsqrt (x) * x보다 느리습니까?] (http://stackoverflow.com/questions/1528727/why-is-sse -scalar-sqrtx-slower-than-rsqrtx-x). –