Matematické funkcie v PHP
PHP je známe svojou veľkou zásobou funkcií. A nájdeme tu samozrejme aj matematické funkcie. Dnes si predstavíme tie najdôležitejších a najpoužívanejších z nich.
Round, ceil, floor
Niekedy nám pri výpočtoch vyjdú čísla ako 3,185643854. A nie vždy potrebujeme takto presné číslo alebo dokonca vôbec jeho desatinnú časť. A na to tu máme 3 funkcie.
Round
Klasické zaokrúhľovania, ktoré poznáme zo školských lavíc. "Čo je pod polovicu zaokrúhlime nadol, čo je nad alebo rovný polovici tak hore". Druhým parametrom sa dá aj určiť presnosť, tzn. na koľko desatinných miest budete zaokrúhľovať.
Príklad:
round(5); // 5 round(5.1); // 5 round(5.4); // 5 round(5.5); // 6 round(5.8); // 6 round(5483.47621, 2); // 5483.47 round(5483.47621, -2); // 5500
U funkcie round je aj tretí parameter, kde môžete nastaviť mód. Tu sa dá nastaviť "deliacou hodnota", tzn. číslica 5, či sa zaokrúhli nahor alebo nadol. Pre podrobnejšie pochopenie týchto módov si odporúčam prečítať oficiálny dokumentáciu a alebo si jednoducho chvíľu skúšať a hrať sa s tým. Tu je jednoduchá tabuľka ukazujúca rozdiely medzi týmito módy. Defaultná hodnota pre PHP je PHP_ROUND_HALF_UP.
číslo | round | PHP_ROUND_HALF_UP | PHP_ROUND_HALF_DOWN | PHP_ROUND_HALF_EVEN | PHP_ROUND_HALF_ODD |
---|---|---|---|---|---|
5 | 5 | 5 | 5 | 5 | 5 |
5.1 | 5 | 5 | 5 | 5 | 5 |
5.2 | 5 | 5 | 5 | 5 | 5 |
5.3 | 5 | 5 | 5 | 5 | 5 |
5.4 | 5 | 5 | 5 | 5 | 5 |
5.5 | 6 | 6 | 5 | 6 | 5 |
5.6 | 6 | 6 | 6 | 6 | 6 |
5.7 | 6 | 6 | 6 | 6 | 6 |
5.8 | 6 | 6 | 6 | 6 | 6 |
5.9 | 6 | 6 | 6 | 6 | 6 |
6 | 6 | 6 | 6 | 6 | 6 |
číslo | round | PHP_ROUND_HALF_UP | PHP_ROUND_HALF_DOWN | PHP_ROUND_HALF_EVEN | PHP_ROUND_HALF_ODD |
---|---|---|---|---|---|
-5 | -5 | -5 | -5 | -5 | -5 |
-5.1 | -5 | -5 | -5 | -5 | -5 |
-5.2 | -5 | -5 | -5 | -5 | -5 |
-5.3 | -5 | -5 | -5 | -5 | -5 |
-5.4 | -5 | -5 | -5 | -5 | -5 |
-5.5 | -6 | -6 | -5 | -6 | -5 |
-5.6 | -6 | -6 | -6 | -6 | -6 |
-5.7 | -6 | -6 | -6 | -6 | -6 |
-5.8 | -6 | -6 | -6 | -6 | -6 |
-5.9 | -6 | -6 | -6 | -6 | -6 |
-6 | -6 | -6 | -6 | -6 | -6 |
Príklad:
echo round("4,8"). "<br />"; // 4, jelikož kompilátor to usekne pouze na číslici 4 echo round("4.8"). "<br />"; // 5, kompilátor je schopen převést datový typ echo round(4,8). "<br />"; // 4 echo round(4.8). "<br />"; // 5
Ceil a floor
Tieto funkcie vám vždy zaokrúhli desatinné číslo rovnakým smerom, bez ohľadu či je v hornej alebo spodnej polovici. Ceil zaokrúhľuje vždy hore, floor dole. Nie je tu bohužiaľ parameter na presnosť, preto to ide iba len na jednotky.
Príklad:
ceil(4.2); // 5 ceil(4.5); // 5 ceil(4.7); // 5 floor(4.2); // 4 floor(4.5); // 4 floor(4.7); // 4
Tu môžete aj vidieť porovnanie týchto 3 funkcií v tabuľke.
číslo | round | ceil | floor | číslo | round | ceil | floor |
---|---|---|---|---|---|---|---|
5 | 5 | 5 | 5 | -5 | -5 | -5 | -5 |
5.1 | 5 | 6 | 5 | -5.1 | -5 | -5 | -6 |
5.2 | 5 | 6 | 5 | -5.2 | -5 | -5 | -6 |
5.3 | 5 | 6 | 5 | -5.3 | -5 | -5 | -6 |
5.4 | 5 | 6 | 5 | -5.4 | -5 | -5 | -6 |
5.5 | 6 | 6 | 5 | -5.5 | -6 | -5 | -6 |
5.6 | 6 | 6 | 5 | -5.6 | -6 | -5 | -6 |
5.7 | 6 | 6 | 5 | -5.7 | -6 | -5 | -6 |
5.8 | 6 | 6 | 5 | -5.8 | -6 | -5 | -6 |
5.9 | 6 | 6 | 5 | -5.9 | -6 | -5 | -6 |
6 | 6 | 6 | 5 | -6 | -6 | -5 | -6 |
Väčšina z nás pozná 4 goniometrické funkcie: sínus, kosínus, tangens, cotagens. PHP má však funkcií s goniometrie rovnou 12. Tu je ich ukážka: sin, asin, sinh, ASINH. Dôležité je pre začiatok spomenúť, že parameter je v radiánoch. Ak by ste chceli zadávať uhol, musíte použiť funkciu deg2rad.
- sin = klasický sinus
- asin = arkus sínus (inverzná funkcia k sinus, možno poznáte z kalkulačiek ako sin -1)
- sinh = hyperbolický sínus
- ASINH = Inverzný hyperbolický sínus. (Spojenie tých dvoch)
Rovnaké zastúpenie má aj cosinová funkcie (cos, ACOS, cosh, acosh) a tangens (tan, atan, TANH, ATANH). Naviac je však tu funkcia ATAN2, kde počíta s dvoma hodnotami a je to ako by sme počítali arkus tangens y / xs tým rozdielom, že funkcia podľa znamienok vyberie kvadrant. Verím ale že tieto funkcie naozaj len tak nevyužívate a klasický sínus, kosínus, tagens vám bude stačiť. Mimochodom, ak ste to v škole zaspali, Cotangens možno urobiť ako 1 / tan (x).
Príklad
echo sin(30); // -0.98803162409286 echo sin(deg2rad(30)); // 0.5 echo cos(deg2rad(123)); // -0.54463903501503 echo 1/tan(deg2rad(45)); // 1 (onen cotangens) echo sin(deg2rad(500)); // 0.64278760968654 echo atan2(deg2rad(50), deg2rad(23)); // 1.1396575860761
Deg2rad a rad2deg
Spomínaný prevod medzi radiány a stupňami.
Príklad:
echo deg2rad(45); //0.785398163 echo rad2deg(0.401425728); //23
Prevod sústav
V PHP je niekoľko funkcií na prevod medzi rôznymi sústavami. Ukážme si príklady:
Príklad:
echo decoct(24); // 30 (z desítkové do osmičkové) echo dechex(24); // 18 (z desítkové do šestnáctkové) echo decbin(24); // 11000 (z desítkové do dvojkové) echo bindec(101110); // 46 (z dvojkové do desítkové) echo octdec(24); // 20 (z osmičkové do desítkové) echo hexdec(24); // 36 (z šestnáctkové do osmičkové)
Ovšem stačí si zapamätať len jednu funkciu a to base_convert, ktorú prevediete z ľubovoľnej sústavy do ďalšej ľubovoľné. Trebárs aj trojkového:
echo base_convert("2AF36", 16, 3); //22221022210 (z šestnáctkové do trojkové)
Kontrola typu čísla
V PHP ide jednoducho podľa určitých funkcií zistiť či je číslo konečné, nekonečné alebo neznáme vďaka funkciám is_finite, is_infinite, a is_nan. Používajú s často v podmienkach, ich návratová hodnota boolean.
is_finite ukazuje či je číslo konečné.
Príklad
var_dump(is_finite(log(0))); //false var_dump(is_finite(10/0)); //ERROR var_dump(is_finite(6)); //true var_dump(is_finite(9223372036854775807)); //true (PHP_INT_MAX) var_dump(is_finite(9223372036854775807+1)); //true var_dump(is_finite(8.5070591730235E+37)); //true
- is_infinite vracia či je číslo nekonečné (možno nahradiť za! is_finite ())
- is_nan kontroluje či sa nejedná o neznámu hodnotu
Príklad
var_dump(is_nan(acos(30))); //true var_dump(is_nan(48)); //false var_dump(is_nan(10/0)); //ERROR
Ďalšie dôležité matematické funkcie
- abs (x) = vracia absolútnu hodnotu
- exp (x) = exponencioální funkcie
- expm1 (x) = je definovaný ako exp (x) -1. Opäť nejaká zvláštna matematická funkcia
- FMOD (x, y) = vracia desatinná zvyšok po delení x / y
- sprevádza (x, y) = výpočet prepony u pravouhlého trojuholníka (Pytagorova veta)
- log (x, y) = logaritmus xo základe y. Ak nezadáte základ, je defaultný hodnota konštanta M_E -> 2.718281828459)
- log10 (x) = logaritmus o základe 10
- log1p (x) = logaritmus (1 + x)
- min (x) a max (x) = nájde minimálne alebo maximálnu hodnotu z poľa čísel.
- rand (x, y), mt_rand (x, y) = funkcie generovanie čísel (mt_rand má vylepšený algoritmus)
- pow (x, y) = mocnina x na y
- sqrt (x) = vracia druhú odmocninu x
Statické funkcie
- getrandmax = vracia maximálnu hodnotu funkcie rand ();
- pi = vracia 3.1415926535898, rovnaké ako konštanta M_PI
Konštanty
PHP má aj preddefinované vlastné konštanty, a dosť je ich aj v PHP. Tu je výpis niekoľkých hlavných:
Názov | hodnota | popis |
---|---|---|
M_PI | 3.14159265358979323846 | π |
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 | odmocnina z π |
M 2 _SQRTPI | 1.12837916709551257390 | 2 / odmocnina z π |
M_LNPI | 1.14472988584940017414 | log_e (π) |
M_SQRT2 | 1.41421356237309504880 | odmocnina z 2 |
M_SQRT3 | 1.73205080756887729352 | odmocnina z 3 |
M_SQRT1_2 | 0.70710678118654752440 | 1 / odmocnina z 2 |
M_EULER | 0.57721566490153286061 | Eulerova konštanta |
Tu ešte raz je najdôležitejšie výpis funkcií:
- round, ceil, floor
- sin, cos, tan
- base_convert, deg2rad, rad2deg
- abs, log, mt_rand, pow, sqrt, FMOD
- min, max