PHPの定義済み数学定数一覧と使い方まとめ
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 | オイラー定数(γ) |
注意: 一部の定数(M_SQRTPI、M_2_SQRTPI、M_SQRT3、M_LNPI、M_EULER など)は、PHPのビルド環境によっては定義されていない場合があります。利用前に defined('M_SQRTPI') などで存在確認を行うと安全です。
丸めモードを指定する定数(PHP_ROUND_HALF_*)
round() 関数の第3引数には、次の丸めモード定数を指定できます。これらは端数がちょうど「0.5」になった場合の丸め方を制御するためのものです。
| 定数 | 値 | 説明 |
|---|---|---|
| PHP_ROUND_HALF_UP | 1 | 端数を切り上げる(いわゆる四捨五入) |
| PHP_ROUND_HALF_DOWN | 2 | 端数を切り下げる |
| PHP_ROUND_HALF_EVEN | 3 | 端数を最も近い偶数に丸める(銀行家の丸め) |
| PHP_ROUND_HALF_ODD | 4 | 端数を最も近い奇数に丸める |
使用例
<?php
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); // 3
?>
NAN と INF について
- NAN(Not A Number):「非数」を表す特殊な値です。
acos(2)のような定義域外の演算結果として返されます。NAN は自身を含むどの値とも等しくならないため、判定には必ずis_nan()関数を使用してください。 - INF(Infinity):無限大を表す定数です。
exp(1000)のように計算結果が浮動小数点数の表現範囲を超えた場合に返されます。無限大の判定にはis_infinite()関数が利用できます。
これらの定数を適切に使い分けることで、数値計算を含むPHPのコードをより正確かつ簡潔に記述できるようになります。
-
どちらが速い?PHPの定数・変数・配列のパフォーマンス比較
PHPにおける定数・変数・配列の速度差とは?PHPでパフォーマンスを意識したコードを書く際、「定数・変数・配列のどれが最も速いのか」という疑問はよく挙がります。結論から言えば、一般的には変数が最も高速で、次いでconstキーワードで定義した定数、そしてdefine()関数で定義した定数は相対的に遅いという傾向があります。define()で定義した定数はなぜ遅いのかPHPでは定数をdefine()関数を使って定義できますが、この方法で定義された定数は実行時に処理されるため、比較的低速です。関数呼び出しのオーバーヘッドが発生し、定数がシンボルテーブルに登録されるタイミングも遅くなるためです。hid
-
Pythonの数学定数(math.pi と math.e)の使い方
Pythonの数学定数とは Pythonのmathモジュールには、数値計算で頻繁に使われる数学定数があらかじめ定義されています。これらの定数を利用すれば、円周率や自然対数の底といった値を手入力する必要がなく、高精度な計算を簡単かつ正確に行えます。 mathモジュールで定義されている主な数学定数は、以下の2つです。 番号定数と説明 1math.pi円周率π(パイ)。約 3.141592653589793 という値を持ち、円の面積・周長の計算や三角関数を用いた処理などで広く使われる、最も基本的な数学定数です。 2math.e自然対数の底 e(ネイピア数)。約 2.7182818284590