code

Constexpr 수학 함수

codestyles 2020. 12. 31. 08:19
반응형

Constexpr 수학 함수


그래서이 페이지 에서 C ++ 11의 어떤 수학 함수도 constexpr을 사용하지 않는 것으로 보이지만, 나는 그것들 모두가 가능하다고 믿습니다. 그래서 두 가지 질문이 남습니다. 하나는 함수를 constexpr로 만들지 않기로 선택한 이유입니다. 그리고 sqrt같은 함수에 대한 두 개 는 아마도 내 자신의 constexpr을 작성할 수 있지만 sin 또는 cos와 같은 것은 더 까다로울 것이므로 그 주위에 방법이 있습니다.


사실, 오래되고 성가신 레거시 때문에 수학 함수는 거의 없습니다 constexpr. 왜냐하면 모두 errno다양한 오류 조건 (일반적으로 도메인 오류)에 대한 설정의 부작용이 있기 때문 입니다.


B. Stroustrup의 "The C ++ Programming Language (4th Edition)"에서 C ++ 11을 설명합니다.

"컴파일 시간에 평가하려면 함수가 적절하게 단순해야합니다. constexpr 함수는 단일 return-statement로 구성되어야합니다. 루프 나 지역 변수가 허용되지 않습니다. 또한 constexpr 함수는 부작용이 없을 수 있습니다."

즉, for, while 및 if 문과 지역 변수없이 인라인이어야합니다. 부작용도 금지됩니다 (예 : errno 변경). 또 다른 문제는 대부분의 수학 함수가 순수 c / c ++로 표현되지 않는 FPU 명령어라는 것입니다 (어셈블러 코드로 작성 됨). 그래서 non of cmath 함수가 constexpr로 선언 된 이유입니다.


그래서이 페이지에서 C ++ 11의 어떤 수학 함수도 constexpr을 사용하지 않는 것으로 보이지만, 나는 그것들 모두가 가능하다고 믿습니다. 그래서 두 가지 질문이 남습니다. 하나는 함수를 constexpr로 만들지 않기로 선택한 이유입니다.

이 부분은 Sebastian RedlAdam Szaj 가 매우 잘 대답 했으므로 여기에 아무것도 추가하지 않을 것입니다.

그리고 sqrt와 같은 함수에 대해 두 개는 아마도 내 자신의 constexpr을 작성할 수 있지만 sin 또는 cos와 같은 것은 더 까다로울 것이므로 주변에 있습니다.

예, 이러한 함수의 taylor 시리즈 확장을 사용하여 constexpr sin, cos의 고유 한 버전을 작성할 수 있습니다. constexpr 함수로 여러 수학 함수를 구현하는이 멋진 github 저장소를 살펴보세요 Morwenn / static_math

참조 URL : https://stackoverflow.com/questions/17347935/constexpr-math-functions

반응형