PHP는 별도의 선언이나 라이브러리 설치 없이 바로 사용할 수 있는 미리 정의된(predefined) 수학 상수를 기본적으로 제공합니다. 이러한 상수에는 원주율(π), 오일러 수(e), 자연로그 값, 제곱근 등 수학 연산에 자주 쓰이는 고정밀도 값들이 포함되어 있어, 개발자가 직접 값을 입력하는 것보다 정확성과 가독성 면에서 훨씬 유리합니다.
PHP 수학 상수 목록
아래 표는 PHP에서 제공하는 주요 수학 상수와 실제 값, 그리고 각 상수의 의미를 정리한 것입니다.
| 상수 | 값 | 설명 |
| M_PI | 3.14159265358979323846 | 원주율 π (파이) |
| M_E | 2.7182818284590452354 | 오일러 수 e (자연로그의 밑) |
| M_LOG2E | 1.4426950408889634074 | log2 e |
| M_LOG10E | 0.43429448190325182765 | log10 e |
| M_LN2 | 0.69314718055994530942 | loge 2 (2의 자연로그) |
| M_LN10 | 2.30258509299404568402 | loge 10 (10의 자연로그) |
| M_PI_2 | 1.57079632679489661923 | π/2 |
| M_PI_4 | 0.78539816339744830962 | π/4 |
| M_1_PI | 0.31830988618379067154 | 1/π |
| M_2_PI | 0.63661977236758134308 | 2/π |
| M_SQRTPI | 1.77245385090551602729 | √π (파이의 제곱근) |
| M_2_SQRTPI | 1.12837916709551257390 | 2/√π |
| M_SQRT2 | 1.41421356237309504880 | √2 (2의 제곱근) |
| M_SQRT3 | 1.73205080756887729352 | √3 (3의 제곱근) |
| M_SQRT1_2 | 0.70710678118654752440 | 1/√2 |
| M_LNPI | 1.14472988584940017414 | loge(π) (π의 자연로그) |
| M_EULER | 0.57721566490153286061 | 오일러 상수 (오일러–마스케로니 상수 γ) |
| PHP_ROUND_HALF_UP | 1 | 절반 값을 위로 반올림 (일반적인 반올림) |
| PHP_ROUND_HALF_DOWN | 2 | 절반 값을 아래로 내림 |
| PHP_ROUND_HALF_EVEN | 3 | 절반 값을 가장 가까운 짝수로 반올림 (은행가 반올림) |
| PHP_ROUND_HALF_ODD | 4 | 절반 값을 가장 가까운 홀수로 반올림 |
| NAN | NAN | Not A Number — 숫자가 아님을 나타내는 특수 값 |
| INF | INF | 무한대(Infinity)를 나타내는 특수 값 |
주요 상수 활용 방법
이 상수들은 스크립트 어디에서든 추가 설정 없이 즉시 사용할 수 있습니다. 예를 들어 원의 넓이를 계산할 때 M_PI를 활용하면 됩니다.
$radius = 5;
$area = M_PI * $radius ** 2; // 원의 넓이 계산
echo $area; // 78.539816339745round() 함수와 반올림 모드 상수
PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN, PHP_ROUND_HALF_ODD 상수는 round() 함수의 세 번째 인자(모드)로 사용됩니다. 특히 금융·통계 계산에서 반올림 방식이 결과에 큰 영향을 미치므로, 상황에 맞는 모드를 선택하는 것이 중요합니다.
echo round(2.5, 0, PHP_ROUND_HALF_UP); // 3
echo round(2.5, 0, PHP_ROUND_HALF_DOWN); // 2
echo round(2.5, 0, PHP_ROUND_HALF_EVEN); // 2
echo round(2.5, 0, PHP_ROUND_HALF_ODD); // 3NAN과 INF 처리 시 주의사항
NAN은 0으로 나누기나 유효하지 않은 수학 연산의 결과로 나타날 수 있으며, 자기 자신과도 같지 않은(NAN === NAN이 거짓) 특수한 성질이 있습니다. 따라서 NAN 여부는 반드시 is_nan() 함수로 검사해야 합니다. 마찬가지로 무한대 값은 is_infinite(), 유한한 값인지는 is_finite() 함수로 확인하는 것이 안전합니다.