Математичні функції
У цій лекції я розглянемо математичні функції, які є в 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.