[web-Devil]
Вс, 05.01.2025, 20.05.28
» Меню сайта
» Категории раздела
PHP [18]
Уроки PHP
MySql [6]
Все о MySql
» Статистика
Главная » Статьи » Програмирование » PHP

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

В этом уроке я познакомлю читателей с математическими функциями, которые имеются в 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 | Добавил: web-Devil (20.11.2009)
Просмотров: 1887 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
» Поиск
» Друзья
  • В Контакте
  • Deposit Files (регистрация)
  • $$$ для web-мастеров
  • » Реклама
    Copyright [web-Devil] © 2025Хостинг от uCoz