2016-10-15 8 views
3

angle == std::acos(std::cos(angle))angle이 [0, Pi] 범위에 있으면 C++ 표준에 의해 보장되는지, 다시 말해서 복원 할 수 있습니까? 정확한 원래 값 anglestd::cos의 결과에서 std::acos을 사용하면 위에서 언급 한 범위 한도를 얻었습니까?std :: cos (angle)에서 std :: cos (angle)을 사용하여 정확한 각도 복원하기

angleinfinity 또는 NaN 일 때 한계 사례가 생략되었습니다. 이야기꾼에 의해

+1

. 부동 소수점 정밀도는이를 방지합니다. – tkausl

+1

정밀도와 반올림에 의해 제한됩니다 – Evgeniy

+1

표준은 그 보증을 할 수 없습니다. 단순히'std :: cos'의 결과가'double'에 의해 표현 될 수 없기 때문에,'std :: acos'의 결과에 영향을 줄 수있는 잘라내 기 오류가 발생합니다. – StoryTeller

답변

3

답변 : std::cos의 결과가 double에 의해 정확하게 표현할하지 않을 수 있기 때문에 단순히 당신이 절단 오류 때문에 표준, 그 보증을 할 수 없습니다

, std::acos의 결과에 영향을 미칠 것 . cppreference.com 가입일

+0

실제로 그 이유가 있습니까? 값을 초기 값으로 다시 매핑하는 준수 구현을하는 것이 불가능합니까? – xaxxon

+0

@StoryTeller : 사기꾼이라면 괜찮아요.하지만 답변을 얻으려면 적절한 곳에서하세요. –

+0

@xaxxon, 두렵습니다. 함수가 값을 받아들이면, 모든 숫자를 중요하게 취급해야하며, 값은 호출자가 의도 한 것과 정확히 일치해야합니다. – StoryTeller

3

:

오류가 [복귀 ACOS] 0의 범위 [ARG에서의 아크 코사인 (ARCCOS (ARG))를 발생하지 않을 경우; π]

도 단위로, 0에서 180까지이며, 값은 1부터 -1까지의 코사인 값에 해당합니다.

해당 범위 밖에서는 대략적인 서신을 얻을 수 없습니다. 코사인 계산 범위 밖의 각도에 대한 정보를 삭제합니다. 그 정보를 되 찾을 방법이 없습니다.

정보 폐기 방법

먼저, 각도, COS (x)는 COS = (K를 * 360 + x)를 임의의 정수 (K)에 대한 두 번째로, COS (X) = COS (-x). 이것은 동일한 코사인 값을 생성하는 엄청난 각도 값을 합산합니다.

또한 모든 독자가 이것을 알고 있지만 완전 함을 알고 있더라도 사인은 코사인이 매우 비합리적인 숫자이며 일반적으로 단순한 분수가 아니기 때문에 0도에 해당하는 코사인 1을 제외하고는 정확한 결과를 기대할 수 없습니다 .

+0

"매우"불합리한가요? 나는 학교에있는 사람들에 대해 결코 알지 못했다 : – xaxxon

+0

@xaxxon : pi는 계량 적 숫자 체계로 표현 될 때 아주 체계적이고 단순한 숫자의 순서가되기 때문에 조금 비합리적이다. 하지만 1.234 도의 사인은 어쩌면 비합리적 일 것입니다. :-p –

0

수학적으로도 이것은 불가능합니다. 예를 들어, cos(2*PI)은 0이지만, cos(4*PI)도 마찬가지입니다. 표준에 따르면

+0

그래, 기간 기능을 잊어 버렸다. – xaxxon

1

:

이 국제 표준은 부동 소수점 연산의 정확성 에 대한 요구 사항을 부과하지 않습니다; 18.3.2도 참조하십시오. - 난 그렇게 생각하지 않는다 엔드 노트]

http://open-std.org/JTC1/SC22/WG21/docs/papers/2016/n4606.pdf

+0

사실, 하드웨어의 모든 기능을 사용하지 않도록 구현을 제한하지 않아야합니다. 그리고 저는 그것이 부적절하다고 생각합니다. 매회 정확한 계산을 할 수있는 기계가 존재한다면 그 표준은 그 약속을 할 수 없다. 실용적인 관점에서 숫자 코드를 다룰 때 항상주의해야합니다. – StoryTeller

+0

@StoryTeller 표준은 보증이 보증되었는지 구체적으로 물어 보았습니다. 표준의이 비트가 보증에서 제외 되었기 때문에 보증에서 제외되었습니다. 질문에서 요청한 방향에서 답변에 접근한다고 생각하기 때문에 . – xaxxon

+0

나는이 견적서에서 읽는 스트레치가 약간 있다고 생각한다. 표준은 일반적으로 가능한 한 제한을 최소화하려고 시도합니다. 하지만 그래, 나는 왜 그것을 배제 할 수 있는지 알 수있다. – StoryTeller