Функции mem... предназначены для манипулирования с объектами как с массивами символов; их назначение - получить интерфейсы к эффективным программам. В приведенной ниже таблице s и t принадлежат типу void *; cs и ct - типу const void *; n - типу size_t; а c имеет значение типа int, приведенное к типу char.
void *memcpy(s,ct, n) | копирует n символов из ct в s и возвращает s |
void *memmove(s,ct,n) | делает то же самое, что и memcpy, но работает и в случае "перекрывающихся" объектов. |
int memcmp(cs, ct, n) | сравнивает первые n символов cs и ct; выдает тот же результат, что и функция strcmp |
void *memchr(cs, c, n) | возвращает указатель на первое вхождение символа c в cs или, если среди первых n символов c не встретилось, NULL |
void *memset(s, c, n) | размещает символ c в первых n позициях строки s и возвращает s |
B4. Математические функции: <math.h>
В заголовочном файле <math.h> описываются математические функции и определяются макросы.
Макросы EDOM и ERANGE (находящиеся в <errno.h>) задают отличные от нуля целочисленные константы, используемые для фиксации ошибки области и ошибки диапазона; HUGE_VAL определена как положительное значение типа double. Ошибка области возникает, если аргумент выходит за область значений, для которой определена функция. Фиксация ошибки области осуществляется присвоением
errno значения EDOM; возвращаемое значение зависит от реализации. Ошибка диапазона возникает тогда, когда результат функции не может быть представлен в виде double. В случае переполнения функция возвращает HUGE_VAL с правильным знаком и в errno устанавливается значение ERANGE. Если результат оказывается меньше, чем возможно представить данным типом, функция возвращает нуль, а устанавливается ли в этом случае errno в ERANGE, зависит от реализации. Далее x и y имеют тип double, n - тип int, и все функции возвращают значения типа double. Углы в тригонометрических функциях задаются в радианах.sin(x) | синус x |
cos(x) | косинус x |
tan(x) | тангенс x |
asin(x) | арксинус x в диапазоне [-pi/2,pi/2], x в диапазоне [-1,1] |
acos(x) | арккосинус x в диапазоне [0, pi], x в диапазоне [-1,1] |
atan(x) | арктангенс x в диапазоне [-pi/2, pi/2] |
atan2(y,x) | арктангенс y/x в диапазоне [-pi, pi] |
sinh(x) | гиперболический синус x |
cosh(x) | гиперболический косинус x |
tanh(x) | гиперболический тангенс x |
exp(x) | Экспоненциальная функция ex |
log(x) | натуральный логарифм ln(x), x > 0 |
log10(x) | десятичный логарифм lg(x), x > 0 |
pow(x,y) | xy, ошибка области, если x = 0 или y<=0 или x<0 и y – не целое |
sqrt(x) | квадратный корень x, x >= 0 |
ceil(x) | наименьшее целое в виде double, которое не меньше x |
floor(x) | наибольшее целое в виде double, которое не больше x |
fabs(x) | абсолютное значение |x| |
ldexp(x, n) | x * 2n |
frexp(x, int *еxр) | разбивает x на два сомножителя, первый из которых - нормализованная дробь в интервале [1/2, 1), которая возвращается, а второй - степень двойки, эта степень запоминается в *exp. Если x - нуль, то обе части результата равны нулю |
modf(x,double *ip) | разбивается на целую и дробную части, обе имеют тот же знак, что и x. Целая часть запоминается в *ip, дробная часть выдается как результат |
fmod(x, y) | остаток от деления x на y в виде числа с плавающей точкой. Знак результата совпадает со знаком x. Если y равен нулю, результат зависит от реализации |