정의 및 사용법
함수 이름의 '1p'는 '1 plus'(1 더하기)를 의미합니다. log1p() 함수는 1+숫자에 대한 자연로그(밑이 e인 로그)를 계산합니다.
즉, 수식으로 표현하면 다음과 같습니다.
log1p(x) = log(1 + x)
log1p()는 x가 매우 작아서 1+x가 사실상 x와 거의 같아지는 경우에도 정확한 결과값을 얻을 수 있도록 특별히 설계된 함수입니다. 일반적인 log() 함수로 log(1+x)를 직접 계산하면 부동소수점 연산 과정에서 정밀도 손실이 발생할 수 있지만, log1p()는 이러한 문제를 방지합니다.
구문
log1p ( float $arg ) : float
매개변수
| 번호 | 매개변수 및 설명 |
|---|---|
| 1 | arg 자연로그를 계산할 숫자입니다. 이 값에 1을 더한 후 로그를 구합니다. |
반환 값
PHP log1p() 함수는 arg + 1의 자연로그 값을 반환합니다.
PHP 버전
이 함수는 PHP 4.x, PHP 5.x, PHP 7.x 등 주요 버전에서 모두 사용할 수 있습니다.
예제 1: 기본 사용법
다음 예제는 100에 대한 log1p 값을 계산하고, 일반 log() 함수와 비교합니다.
<?php
$arg=100;
echo "log()로 log(1+". $arg.") 계산: " . log(1+$arg) . "\n";
echo "log1p(" . $arg . ")= " . log1p($arg);
?>
출력 결과
log()로 log(1+100) 계산: 4.6151205168413
log1p(100)= 4.6151205168413
큰 수의 경우 두 방식 모두 동일한 결과를 보여줍니다.
예제 2: 인수가 0일 때
일반 log(0)은 음의 무한대(-infinity)를 반환하지만, log1p(0)은 0을 반환합니다.
<?php
$arg=0;
echo "log(" . $arg . ")= " . log($arg) . "\n";
echo "log1p(" . $arg . ")= " . log1p($arg);
?>
출력 결과
log(0)= -INF
log1p(0)= 0
예제 3: 아주 작은 수의 정밀도 차이
매우 작은 숫자를 다룰 때 log1p()가 더 높은 정확도를 제공합니다.
<?php
$arg=0.000005;
echo "log(" . $arg . ")= " . log($arg) . "\n";
echo "log1p(" . $arg . ")= " . log1p($arg);
?>
출력 결과
log(5.0E-6)= -12.20607264553
log1p(5.0E-6)= 4.9999875000744E-6
위 결과에서 볼 수 있듯이, log(1+0.000005)를 log()로 직접 계산하면 부동소수점 오차로 인해 전혀 다른 값이 나오지만, log1p()는 약 5.0E-6이라는 올바른 근사값을 정확하게 반환합니다.
예제 4: NAN 처리
sqrt(-1)의 결과는 NAN(Not A Number)이므로, 이를 인수로 넘기면 log1p() 역시 NAN을 반환합니다.
<?php
$arg=sqrt(-1);
echo "log(" . $arg . ")= " . log($arg) . "\n";
echo "log1p(" . $arg . ")= " . log1p($arg);
?>
출력 결과
log(NAN)= NAN
log1p(NAN)= NAN
마무리
log1p() 함수는 특히 금융 계산, 확률·통계 처리처럼 매우 작은 수치의 로그 변환이 필요한 분야에서 유용합니다. 작은 값에 대한 log(1+x) 계산 시 발생하는 부동소수점 정밀도 문제를 해결해야 한다면, log() 대신 log1p()를 사용하는 것이 바람직합니다.