math_log
math_log (자연로그)
std::log는 num의 자연로그(밑 e 로그)를 계산하는 함수예요. 결과는 ln(num) 또는 logₑ(num)이에요.
출처: cppreference
본문
<cmath> 헤더에 정의되어 있고, 시그니처는 다음과 같아요.
float log ( float num );
double log ( double num );
long double log ( long double num );
(1) (until C++23)
/*floating-point-type*/
log ( /*floating-point-type*/ num );
(since C++23) (constexpr since C++26)
float logf( float num );
(2) (since C++11) (constexpr since C++26)
long double logl( long double num );
(3) (since C++11) (constexpr since C++26)
SIMD 오버로드 (since C++26): <simd> 헤더에 정의돼요.
template< /*math-floating-point*/ V >
constexpr /*deduced-simd-t*/<V>
log ( const V& v_num );
(S) (since C++26)
추가 오버로드 (since C++11): <cmath> 헤더에 정의돼요.
template< class Integer >
double log ( Integer num );
(A) (constexpr since C++26)
- 1-3) num의 자연로그(밑 e)를 계산해요. 라이브러리는 매개변수의 타입으로 모든 cv 한정되지 않은 부동소수점 타입에 대한
std::log오버로드를 제공해요. (C++23부터) - S) SIMD 오버로드는 v_num에 요소별
std::log를 수행해요. - A) 모든 정수 타입에 대해 추가 오버로드가 제공되는데, double로 취급돼요.
(C++11부터)
매개변수 (Parameters)
- num — 부동소수점 또는 정수 값
반환값 (Return value)
오류가 없다면 num의 자연로그(ln(num) 또는 logₑ(num))를 반환해요.
도메인 오류가 발생하면 구현 정의 값을 반환해요 (NaN 지원 시 NaN).
극(pole) 오류가 발생하면 -HUGE_VAL, -HUGE_VALF, 또는 -HUGE_VALL을 반환해요.
오류 처리 (Error handling)
오류는 math_errhandling에 지정된 대로 보고돼요.
num이 0보다 작으면 도메인 오류가 발생해요.
num이 0이면 극 오류가 발생할 수 있어요.
구현이 IEEE 부동소수점 연산(IEC 60559)을 지원한다면:
- 인자가 ±0이면 -∞를 반환하고 FE_DIVBYZERO를 발생시켜요.
- 인자가 1이면 +0을 반환해요.
- 인자가 음수이면 NaN을 반환하고 FE_INVALID를 발생시켜요.
- 인자가 +∞이면 +∞를 반환해요.
- 인자가 NaN이면 NaN을 반환해요.
참고 (Notes)
추가 오버로드는 정확히 (A) 형태로 제공될 필요는 없어요. 정수 타입의 인자 num에 대해 std::log(num)이 std::log(static_cast<double>(num))과 같은 효과만 있으면 충분해요.
예제 (Example)
이 코드를 실행해 봐요.
#include <cmath>
#include <iostream>
int main()
{
std::cout << "log(1) = " << std::log(1) << '\n'
<< "log(e) = " << std::log(std::exp(1)) << '\n'
<< "log(10) = " << std::log(10) << '\n';
}