Основы PHP
  Что такое PHP?
  Возможности PHP
  Преимущества PHP
  История развития
  Что нового в PHP5?
  «Движок» PHP
  Переход на PHP 5.3
New Переход на PHP 5.6
  Введение в PHP
  Изучение PHP
  Основы CGI
  Синтаксис PHP
  Типы данных PHP
  Переменные в PHP
  Константы PHP
  Выражения PHP
  Операторы PHP
  Конструкции PHP
  Ссылки в PHP
  PHP и ООП
  Безопасность
  Функции PHP
  Функции по категориям
  Функции по алфавиту
  Стандартные функции
  Пользовательские
  PHP и HTTP
  Работа с формами
  PHP и Upload
  PHP и Cookies
  PHP и базы данных
  PHP и MySQL
  Документация MySQL
  Учебники
  Учебники по PHP
  Учебники по MySQL
  Другие учебники
  Уроки PHP
  Введение
  Самые основы
  Управление
  Функции
  Документация
  Математика
  Файлы
  Основы SQL
  Дата и время
  CURL
  Изображения
  Стили
  Безопасность
  Установка
  Проектирование БД
  Регулярные выражения
  Подготовка к работе
  Быстрый старт
  Установка PHP
  Установка MySQL
  Конфигурация PHP
  Download / Скачать
  Скачать Apache
  Скачать PHP
  Скачать PECL
  Скачать PEAR
  Скачать MySQL
  Редакторы PHP
  Полезные утилиты
  Документация
  PHP скрипты
  Скачать скрипты
  Инструменты
  PHP в примерах
  Новости портала
 Главная   »  Уроки PHP (по материалам форума PHP.SU)
 
 

Урок № 5 - Математические функции.

Автор (участник forum.php.su): EuGen
Источник: forum.php.su
Обсуждение: Обсуждение уроков.


В этом уроке я познакомлю читателей с математическими функциями, которые имеются в PHP. Точнее, в примерах использоваться будут лишь самые частые из них, так как полный список проще всего найти на официальном сайте, вместе с подробными описаниями.
Цель данного урока - скорее не представить полный список этих функций, а привести некоторые примеры их использования.

Математические функции предназначены для работы переменными численных типов. Это значит, что операндами будут являться переменные типа int и float.
Я разделю эти функции на несколько типов:

0. Общие функции
1. Тригонометрические функции
2. Обратные тригонометрические функции
3. Логарифмические функции
4. Степенные функции
5. Функции преобразования оснований исчисления
6. Остальные (которые трудно классифицировать)


Общие функции

К общим функциям я отнес функции:
abs
floor
ceil
max
min
round
rand
sqrt
Опишу их более подробно.

abs

Cинтаксис:
number abs ( mixed number )
Функция вычисляет модуль числа. Напомню, что |x|=x, если x>0 или x=0, и |x|=-x, если x<0.

floor

Cинтаксис:
float floor ( float value)
Эта функция округляет дробь в меньшую сторону. Но не стоит думать, что это - "отбрасывание" дробной части. Потому что, во-первых, результат все равно будет не целочисленным, а вещественным. К тому же для отрицательных чисел ближайшим меньшим целым числом будет дробь, дополненная до него.

ceil

Cинтаксис:
float ceil ( float value )
Эта функция также округляет аргумент до ближайшего целого, но уже до ближайшего большего целого. Функции floor и ceil возвращают вещественный результат по одной простой причине - диапазон вещественных чисел в PHP больше, чем целых.

max

Cинтаксис:
mixed max ( number arg1, number arg2 [, number ...] )
mixed max ( array numbers )
Эта функция имеет 2 описания синтаксиса. Она возвращает максимальное значение среди аргументов, если они переданы в виде полного списка (1-й вариант синтаксиса), или же наибольший элемент массива, в случае, если был передан массив (2-й вариант синтаксиса). Любопытно вот что: аргументы могут быть разных типов. Скажем,

<?PHP
$test 
max('строка', array(01), 47);
//вернется array(0, 1) - массив всегда будет считаться больше остального, хотя такое "сравнение" выглядит довольно глупо
?>

Я не могу представить, зачем такое может потребоваться, но тем не менее, в PHP это работает именно так.
Полностью аналогичная функция min, её можно даже не описывать. Разница в том, что возвращается минимум.

round

Cинтаксис:
float round ( float val [, int precision] )
Округляет вещественное число по арифметическим правилам. Можно указать точность округления. В этом случае будет вестись округление до указанного числа знаков дроби. Эту точность можно указать равной 0 (равносильно вызову функции без указания точности). Кроме этого, можно указать и отрицательное значение точности. Результат аналогичен.

rand

Cинтаксис:
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
Cинтаксис:
float sqrt (float arg)
Функция вычисляет квадратный корень аргумента. И аргумент и результат - вещественные.


Тригонометрические и обратные тригонометрические функции

К тригонометрическим функциям я отнес функции:
acos
acosh
asin
asinh
atan2
atan
atanh
cos
cosh
sin
sinh
tan
tanh

Все эти функции принимают в качестве аргумента параметры типа float, и возвращают значение этого же типа. По той причине, что для их описания требуется лишь знание, что конкретно каждая из них делает, не буду приводить здесь все описания. (А назначение этих функций известно из геометрии и алгебры).

acos

Cинтаксис:
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);
}
?>

Да, кстати, вопрос для читателей - я назвал функцию Log - не вызовет ли это конфликта с именем уже существующей функции log?


Степенные функции

Перейдем к степенным функциям:

exp
expm1
pow

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


Функции преобразования оснований исчисления

В php есть специальный ряд функций, которые работают с преобразованием систем счисления. Если учесть, что bin - двоичная система, oct - восмиричная, dec - десятичная, а hex - шестнадцатиричная, то назначение многих из них становится интуитивно понятным:

base_convert
bindec
decbin
dechex
decoct
hexdec
octdec

Интерес же представляет функция base_convert:

base_convert
Cинтаксис:
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
Cинтаксис:
bool is_finite (float val)
Эта функция определяет, конечно ли число с точки зрения диапазона чисел с плавающей точкой. Этот диапазон берется исходя из текущей платформы.

is_finite

Cинтаксис:
bool is_infinite (float val)
Эта функция определяет, бесконечно ли число с точки зрения диапазона чисел с плавающей точкой. При этом, конечно, учитываются возможности платформы, но, скажем, результат log(0) не будет таковым ни на какой платформе (можете подумать, почему)

is_nan
Cинтаксис:
bool is_nan (float val)
Показывает, является ли аргумент действительным числом. С точки зрения алгебры, в категорию не вещественных чисел попадут как не-числа совсем (вроде арккосинуса от двойки), так и комплексные числа (вроде квадратного корня из -1). В обоих случаях функция вернет false.

В конце урока, как обычно, приведу ряд вопросов.

1. Что вернет функция is_nan, если переданный ей аргумент - трансцендентное число с точки зрения алгебры?

2. Пусть у нас обозначаются 1-9 обычный цифры, a-z цифры от 10 до 35, и A-Z цифры от 36 до 62. Напишите функцию, которая бы конвертировала число из одной системы счисления в другую (как base_convert), но с учетом таких обозначений (то есть аргумент принимает значение от 2 до 62)

3. В чем разница между is_nan и is_finite? Приведите примеры, когда их значения от одного и того же аргумента различны.

Ответы на эти вопросы вы найдете здесь: здесь

 
 

 <<< Назад 
 Содержание 
 Вперед >>> 
Есть еще вопросы или что-то непонятно - добро пожаловать на наш  форум портала PHP.SU 
 

 
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS