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 Redl 과 Adam Szaj 가 매우 잘 대답 했으므로 여기에 아무것도 추가하지 않을 것입니다.
그리고 sqrt와 같은 함수에 대해 두 개는 아마도 내 자신의 constexpr을 작성할 수 있지만 sin 또는 cos와 같은 것은 더 까다로울 것이므로 주변에 있습니다.
예, 이러한 함수의 taylor 시리즈 확장을 사용하여 constexpr sin, cos의 고유 한 버전을 작성할 수 있습니다. constexpr 함수로 여러 수학 함수를 구현하는이 멋진 github 저장소를 살펴보세요 Morwenn / static_math
참조 URL : https://stackoverflow.com/questions/17347935/constexpr-math-functions
'code' 카테고리의 다른 글
"식 SFINAE"는 무엇입니까? (0) | 2020.12.31 |
---|---|
어떤 Boost 라이브러리가 헤더 전용입니까? (0) | 2020.12.31 |
플렉스 컨테이너의 동일한 높이 행 (0) | 2020.12.31 |
Maven 프로젝트에 여러 부모가있을 수 있습니까? (0) | 2020.12.31 |
공통 서브 모듈 (마스터 브랜치)에 대한 Git 커밋 (0) | 2020.12.31 |