Вы находитесь на странице: 1из 5

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 33. СТАНДАРТНЫЕ ФУНКЦИИ. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ.

Как и любой другой язык программирования, PHP располагает достаточно


большим количеством стандартных функций, реализующих различные
математические операции, например, округление, возведение в степень, генерация
случайных чисел и др.
Помимо самих функций, в наборе преопределенных констант также имеется
ряд распространенных математических величин: числа «π» и «е», логарифмы и др.
Вот некоторые из них:
- M_PI – число «π»;
- M_E – число «е»;
- M_LOG2E – log2(e);
- M_LOG10E – lg(e);
- M_LN2 – ln(2);
- M_LN10 – ln(10);
- M_SQRT2 – квадратный корень из 2;
- M_LNPI – ln(π);
- M_EULER – постоянная Эйлера
За полным перечнем предопределенных математических констант стоит
обратиться к документации PHP.

Округление чисел
В математике правила округления довольно строго определены – числа до
значения половины от целевого разряда округления, округляются в меньшую
сторону и наоборот, в случае, если предыдущий разряд содержит число больше
половины целевого разряда – округляется в большую сторону:
- число 0,43 при округлении до десятых долей станет равным 0,4;
- число 156 при округлении до 2-го разряда станет равным 160.
При этом допускается округление в меньшую и большую сторону при особых
условиях задачи.
В языках программирования, в т. ч. PHP, все проще – для каждого вида
округления существует своя функция:
А) double round(double $val [, int $precision = 0, int mode = PHP_ROUND_HALF_UP]).
Функция осуществляет математическое округление с заданными
параметрами:
- $val – округляемое число;
- $precision – целевой разряд округления, может принимать как положительное
значение (округление до разряда, расположенного вправо от запятой: при значении
2 число 345,456 округляется до 345,46), так и отрицательное (округление до
разряда, расположенного влево от запятой: -1 => 345,456 = 35);
- mode – параметр округления, определяющий округление значений 0,5:
- PHP_ROUND_HALF_UP – в большую сторону;
- PHP_ROUND_HALF_DOWN – в меньшую сторону;
- PHP_ROUND_HALF_EVEN – до ближайшего четного числа;
- PHP_ROUND_HALF_ODD – до ближайшего нечетного числа.
Б) int ceil(float $number)
Функция производит округление всегда в сторону большего числа. Округление
производится только для дробных разрядов до первого целого разряда числа.
В) int floor(float $number)

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Функция производит округление в сторону меньшего целого числа аналогично


функции ceil().
Листинг 33.1. Функции округления чисел

//Объявляем дробную переменную и выводим ее на экран


$var = 1456.34325;
echo "<p><b>Переменная:</b> {$var};</p>";

//Ввыводим на экран результаты округления различными функциями


echo "<p><b>Округление функцией round() до второго дробного разряда:</b>
".round($var, 2).";</p>";
echo "<p><b>Округление функцией round() до второго целого разряда:</b>
".round($var, -2).";</p>";
echo "<p><b>Округление функцией ceil():</b> ".ceil($var).";</p>";
echo "<p><b>Округление функцией floor():</b> ".floor($var).";</p>";

Модуль числа
Для получения модуля числа предусмотрена простая функция abs():
mixed abs(mixed $number),
в которой объявляется единственный параметр $number, содержащий
целевое число.

Генерация случайных чисел


Ранее, в PHP существовал ряд различных функций для генерации случайных
чисел: rand(), srand(), mt_rand(),mt_srand(), random_int().
В настоящий момент функциями rand() и srand() пользуются редко по причине
низкого качества равномерности распределения случайных чисел.
В настоящий момент используются только 3 последних функции, у которых
распределение случайных чисел более равномерно.
Стоит заметить, что любая из этих функций на самом деле генерирует не
полностью случайные числа, а использует наборы изначально заданных
последовательностей. При этом только в функции mt_srand() возможно вручную
задать смену выбранной последовательности.
Рассмотрим каждую из этих функций:
А) int mt_rand(int $min = 0, int $max = RAND_MAX)
Данная функция генерирует случайное число из автоматически выбранной
последовательности. Возможно задать диапазон генерации параметрами $min и
$max. Если эти параметры не заданы, число генерируется в пределах от 0 до
максимального числа выбранной последовательности.
Узнать число RAND_MAX можно при помощи функции mt_getrandmax(),
определяющей максимальное число из выбранной последовательности случайных
чисел.
Б) void mt_srand(int $seed)
Настраивает генератор случайных чисел на новую последовательность,
определяемую параметром $seed – числом, обозначающим номер
последовательности.
В) int random_int(int $min = PHP_INT_MIN, int $max = PHP_INT_MAX)

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Возвращает число в заданном диапазоне. Если не задано, то определяется


предопределенными константами PHP_INT_MIN и PHP_INT_MAX.
Листинг 33.2. Функции генерации случайных чисел

//Объявим целочисленные переменные, значение которых будет определяться


функциями генерации случайных чисел
$var1 = mt_rand(100, 1000);
$var2 = mt_rand();
$var3 = random_int(-400, 400);

//Выведем на экран значения этих переменных


echo "<b>Значения переменных, значения которых получены с помощью генераторов
случайных чисел:</b>";
echo "<p>Переменная var1, значение получено функцией mt_rand(100, 1000):
{$var1};</p>";
echo "<p>Переменная var2, значение получено функцией mt_rand(): {$var2};</p>";
echo "<p>Переменная var3, значение получено функцией random_int(-400, 400):
{$var3};</p>";

Какую из этих функций выбирать – решать Вам. Главное – помнить о том, что
получаемые числа не являются полностью случайными и зависят от выбранной
последовательности.

Перевод в различные системы исчисления


Для перевода чисел в системы исчисления, отличные от десятичной, в
которой Вы будете работать в большинстве случаев, существует ряд полезных
функций: base_convert(), bindec(), octdec(), hexdec(), decbin(), decoct(), dechex().
Рассмотрим эти функции:
А) string base_convert(string $number, int $frombase, int $tobase)
Переводит число $number из формата $frombase в формат $tobase. Форматы
$frombase и $tobase могут принимать значения от 2 до 36. Переменная $number, как
Вы могли заметить, имеет строковый тип, т. к. в ней могут быть как цифры, так и
символы для различных систем исчисления, например, для 16-ричной.
Б) Функции перевода в десятичную систему:
int bindec(string $num_string)
int octdec(string $num_string)
int hexdec(string $num_string)
Переводят число $num_string из двоичной (bin), восьмеричной (oct) и
шестнадцатеричной (hex) систем в десятичную.
В) Функции перевода из десятичной системы
int decbin(int $number)
int decoct(int $number)
int dechex(int $number)
Прямо противоположны действию функций bindec(), octdec(), hexdec().
Рассмотрим действие этих функций в листинге 33.3.

3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Листинг 33.3. Действие функций перевода в различные системы


исчисления

//Создадим несколько переменных в различных системах исчисления


$var2 = "01101100";
$var8 = "7501";
$var10 = 145623;
$var16 = "FA12B";
$var32 = "FZR34";

//Воспользуемся функциями перевода чисел


echo "<p><b>Перевод числа $var32 в системе исчисления с основанием 32 в систему
исчисления с основанием 10 с помощью функции base_convert():</b>
".base_convert($var32, 32, 10).";</p>";

echo "<b>Перевод чисел {$var2}, {$var8}, {$var16} в десятичную систему исчисления с


помощью функций bindec(), octdec(), hexdec():</b>";
echo "<p>".bindec($var2).";</p>";
echo "<p>".octdec($var8).";</p>";
echo "<p>".hexdec($var16).";</p>";

echo "<b>Перевод числа $var10 в системы исчисления по основанию 2, 8, 16 с


помощью функций decbin(), decoct(), dechex():</b>";
echo "<p>".decbin($var10).";</p>";
echo "<p>".decoct($var10).";</p>";
echo "<p>".dechex($var10).";</p>";

Минимум и максимум
Для определения числового (не лексикографического) минимума и максимума
среди множества значений используются функции min() и max().
Их синтаксис следующий:
mixed min(mixed $var1 [, mixed $var2, …, mixed $varN])
mixed max(mixed $var1 [, mixed $var2, …, mixed $varN])
Из типа mixed переменных-параметров функций следует, что это могут быть
не только простые типы, но и массивы данных.
Рассмотрим принцип нахождения максимального и минимального значения в
массиве случайных чисел в листинге 33.4.
Листинг 33.4. Функции min() и max()

//Создаем массив случайных чисел


$rand_arr = [];
for($i = 0; $i < 10; $i++)
$rand_arr[$i] = mt_rand(0, 20);

//Выводим на экран результаты работы функций min() и max()


echo "<p><b>Элемент, содержащий наименьшее из чисел массива:</b>
".min($rand_arr).";</p>";

4
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

echo "<p><b>Элемент, содержащий наибольшее из чисел массива:</b>


".max($rand_arr).";</p>";

Степенные функции
Здесь приведены функции для быстрого возведения в степень, извлечения
квадратного корня, возвращения натурального логарифма или числа «е» в нужной
степени:
float pow(float $base, float $exp) – возведение числа $base в степень $exp
float sqrt(float $arg) – квадратный корень аргумента $arg
float log(float $arg) – натуральный логарифм аргумента $arg
float exp(float $arg) – число «е» в степени $arg
В случае ввода недопустимых аргументов, функции возвращают NAN или
±Infinite.