Математичні функції

 

У цій лекції я розглянемо математичні функції, які є в PHP. Точніше, в прикладах використовуватися будуть лише найчастіші з них, так як повний список найпростіше знайти на офіційному сайті, разом з докладними описами.

Математичні функції оперують змінними чисельних типів. Це означає, що операндами будуть змінні типу int і float.

Розділемо ці функції на кілька типів:

0. Загальні функції 
1. Тригонометричні функції 
2. Зворотні тригонометричні функції 
3. Логарифмічні функції 
4. Статистичні функції 
5. Функції перетворення основ чисел 
6. Решта (які важко класифікувати)

Загальні функції

До загальних функцій відносяться:

abs 
floor 
ceil 
max 
min 
round 
rand 
sqrt

Опишемо їх більш докладно.

Abs

Синтаксис: 
number abs (mixed number)

Функція обчислює модуль числа. Нагадаю, що | x | = x, якщо x> 0 або x = 0, і | x | =- x, якщо x <0.

Floor

Синтаксис: 
float floor (float value)

Ця функція округляє дріб в меншу сторону. Але не варто думати, що це - "відкидання" дробової частини. Тому що, по-перше, результат все одно буде не цілочисловим, а дійсним. До того ж для негативних чисел найближчим меншим цілим числом буде дріб, доповнений до нього.

Ceil

Синтаксис: 
float ceil (float value)

Ця функція також округлює аргумент до найближчого цілого, але вже до найближчого більшого цілого. Функції floor і ceil повертають дійсний результат з однієї простої причини - діапазон дійсних чисел в PHP більше, ніж цілих.

Max

Синтаксис: 
mixed max (number arg1, number arg2 [, number ...]) 
mixed max (array numbers)

Ця функція має 2 різновиди синтаксису. Вона повертає максимальне значення серед аргументів, якщо вони передані у вигляді повного списку (1-й варіант синтаксису), або ж найбільший елемент масиву, у разі, якщо був переданий масив (2-й варіант синтаксису). Цікаво те що: аргументи можуть бути різних типів. Наприклад:

< ? PHP 
$test = max ('рядок', array (0, 1), 4, 7); 
// Повернеться array (0, 1) - масив завжди вважається більшим, хоча таке "порівняння" виглядає досить безглуздо
?>

Повністю аналогічна функція min, її не будемо описувати. Різниця в тому, що повертається мінімум.

Round

Синтаксис: 
float round (float val [, int precision])

Округлює дійсне число за арифметичними правилами. Можна вказати точність заокруглення. У цьому випадку буде вестися округлення до вказаного числа знаків дробу. Цю точність можна вказати рівною 0 (рівносильно викликом функції без вказівки точності). Крім цього, можна вказати і негативне значення точності. Результат аналогічний.

Rand

Синтаксису: 
int rand ([int min, int max])

Повертає випадкове ціле число в діапазоні від min до max включно. Ці параметри не обов'язкові. Якщо їх не вказувати, повернеться випадкове число в діапазоні від 0 до константи RAND_MAX.

На операційних системах сімейства Windows значення RAND_MAX всього лише 32767

Якщо потрібно випадкове дробове число, то можна скористатися, наприклад, таким кодом:

<? PHP 
// Генеруємо випадкове дійсне число в діапазоні $a.. $b припущенні $ a <$ b 
$iMaxRand = 30000; // по суті, можна задавати і більше для більшої точності 
$iRand = rand (1, $iMaxRand); 
$fRand = $ a + ($b-$a) * $iRand / $iMaxRand; 
?>

Sqrt

Синтаксис: 
float sqrt (float arg)

Функція обчислює квадратний корінь аргументу. І аргумент і результат - дійсні.

Тригонометричні і зворотні тригонометричним функції

До тригонометричним функціям я відніс функції:

acos 
acosh 
asin 
asinh 
atan2 
atan 
atanh 
cos 
cosh 
sin 
sinh 
tan 
tanh

Всі ці функції приймають в якості аргументу параметри типу float, і повертають значення цього ж типу. Всі описи даних функції приводитися не будуть, так як призначення цих функцій відомо з геометрії та алгебри).

Acos

Синтаксис: 
float acos (float arg)

Обчислює арккосинус числа. У разі, якщо аргумент неприпустимий (тобто | arg |> 1), повертає NAN.

Логарифмічні функції

До логарифмічним функцій я відніс функції:

log10 
log1p 
log

Ці функції також не вимагають окремого опису. Окремо відмітимо лише функцію log1p. Справа в тому, що, в силу особливості самого логарифма, при значеннях аргументу, близького до 1, він сильно прямує до нуля. Це може бути перешкодою в "тонких" обчисленнях. Ця функція обчислює значення більш точним способом.

Окрім іншого, наведемо приклад корисної функції, яка обчислює логарифм з довільною основою:

<? PHP 
function Log ($base, $arg) 

if ($base == 1 | | $base <= 0) 

return null; 

if ($arg <= 0) 

return null; 

return log ($arg) / log ($base); 
}
?>

Статистичні функці

Перейдемо до статистичних функцій:
exp 
expm1 
pow

Аналогічно логарифмам, окремо слід звернути увагу лише на expm1, що повертає точно обчислену степінь аргументу, близького до 0.

Функції перетворення основ чисел

У php є спеціальний ряд функцій, які працюють з перетворенням систем числення. Якщо врахувати, що bin - двійкова система, oct - вісімкова, dec - десяткова, а hex – шіснадцяткова, то призначення багатьох з них стає інтуїтивно зрозумілим:

base_convert 
bindec 
decbin 
dechex 
decoct 
hexdec 
octdec

Інтерес представляє функція base_convert:

Синтаксис: 
string base_convert (string number, int frombase, int tobase)

Повертає рядок, що містить число number, записане в основі tobase. Основа, в якій number подається, вказується в frombase. І frombase, і tobase повинні бути в діапазоні від 2 до 36 включно. Чому таке обмеження? Та тому, що цифри, більше 10, записуються за допомогою символів латинського алфавіту. Тобто від a до z. Разом з першими 9-у цифрами вийде якраз 35 можливих значень.

Некласифіковані функції

На кінець наведемо ряд корисних, не класифікованих, функцій:

is_finite 
is_infinite 
is_nan

is_finite

Синтаксис: 
bool is_finite (float val)

Ця функція визначає, чи міститься число в діапазоні чисел з плаваючою крапкою. Цей діапазон береться із специфікацій поточної платформи.

is_ifinite

Синтаксис: 
bool is_infinite (float val)

Ця функція визначає, чи число є нескінченним в діапазоні чисел з плаваючою крапкою. При цьому, звичайно, враховуються можливості платформи.

is_nan

Синтаксис: 
bool is_nan (float val)

Показує, чи є аргумент дійсним числом. З точки зору алгебри, в категорію не дійсних чисел потраплять не зовсім числа (наприклад арккосинус від двійки), так і комплексні числа (наприклад квадратний корінь з -1). В обох випадках функція поверне false.