p align="left">4. Программа не может содержать переменных, имена которых лексически полностью совпадают с макроопределениями в какой - либо подключенной библиотеки. В противном случае, препроцессор в программе заменит имена макросов на вновь определенные, а не на библиотечные выражения; 5. Библиотеки не должны включать определения локальных переменных без указания external (external linkage). 2. Стандартные функции библиотеки math.h Имя функции: ACOS #include <math.h> double acos(x); double x; Описание: Функция acos возврaщaет арккосинус x в интервале от 0 до n. Значение x должно быть между -1 и 1. Возврaщaемое значение: Функция acos возврaщaет результат aрккосинусa. Если x меньше -1 или больше 1, acos устaнaвливaет errno в EDOM, печaтaет сообщение об ошибке DOMAIN в stderr и возврaщaет 0. Обрaботкa ошибок может быть модифицировaнa при изменении процедуры matherr. Пример: В следующем примере прогрaммa выдает подсказки для вводa до тех пор, покa введенное значение не будет в интервале от -1 до 1. #include <math.h> int errno; main() { float x,y; for (errno=EDOM;errno==EDOM;y=acos(x)) { printf("Cosine="); scanf("%f",&x); errno = 0; } printf("Arc cosine of %f = %f\n",x,y); } Обрaзец выводa: Cosine = 3 acos: DOMAIN error Cosine = -1.0 Arc cosine of -1.000000 = 3.141593 Имя функции: ASIN #include <math.h> double asin(x); double x; Описание. Функция asin вычисляет арксинус x в интервале -n/2 до n/2. Значение x должно быть между -1 и 1. Возвращаемое значение: Функция asin возвращает результат арксинуса. Если x меньше -1 или больше 1, asin устанавливает errno в EDOM, печатает сообщение об ошибке DOMAIN в stderr и возвращает 0. Обрaботкa ошибок может быть модифицировaнa при изменении процедуры matherr. Пример: #include <math.h> int errno; main() { float x, y; for (errno=EDOM; errno==EDOM; y=asin(x)) { printf("Синус = "); scanf("%f,&x); errno=0; } printf ("арксинус от %f=%f\n",x,y); } ВЫВОД: Синус = -1.001 asin: DOMAIN error Синус = -1 Арксинус от -1.000000 = -1.570796 Имя функции: ATAN-ATAN2 #include<math. h> double atan(x); double(x); double atan2(y,x); double x; double y; Описание: atan и atan2 функции вычисляют арктангенс x и y/x соответственно: atan возвращает значение в пределах от -пи/2 до пи/2; atan2 возвращает значение в пределах от -пи до пи. Возвращаемое значение: atan и atan2 возвращают значение арктангенса.0, если оба аргумента функции atan2 нулевые; при этом errno устанавливается в EDOM и печатается сообщение об ошибке DOMAIN в stderr. Обработку ошибки можно изменить, используя команду matherr. Пример: #include<math.h> printf("%.7f\n",atan(1.0)); printf("%.7f\n"atan2(-1.0,1.0); ВЫВОД: 0.7853982 -0.7853982 Имя функции: CABS #include<math.h> double cabs(z); struct compex z; Описание: Cabs функция вычисляет абсолютное значение комплексного числа. Комплексное число должно иметь структуру типа complex, определенный в math.h в следующем виде: struct complex { double x,y; }; Вызов cabs эквивалетно sgrt(z.x*z.x+x.y*z.y) Возвращаемое значение: Cabs возвращает абсолютное значение. Нет кодов ошибок. Пример: #include<math.h> struct complex value; double d; value.x=3.0; value.y=4.0; d=cabs(value); Имя функции: CEIL #include<math.h> double ceil(x); double x; Описание: Ceil функция возвращает самое маленькое целое, которое больше или равно значению числа с плавающей точкой. Возвращаемое значение: Число с плавающей точкой. Нет кодов ошибок. Пример: #include <math.h> double y; y=ceil(1.05); /*y=2.0 */ y=ceil(-1.05); /*y=-1.0 */ Имя функции: FABS #include <math.h> double fabs(x); double x; значение с плавающей точкой Описание: Функция fabs возвращает абсолютное значение своего аргумента с плавающей точкой. Возвращаемое значение: Функция fabs возвращает абсолютное значение своего аргумента. Возвращаемого значения в случае ошибки нет. Пример: #include <math.h> double x,y; y = fabs(x);. Имя функции: FLOOR #include <math.h> double floor(x); double x; значение с плавающей точкой. Описание: Функция floor возвращает значение с плавающей точкой, представляющее наибольшее целое, которое меньше или равно x. Возвращаемое значение: Функция floor возвращает результат с плавающей точкой. Возвращаемого значения в случае ошибки нет. Пример: #include <math.h> double y; y = floor(2.8); /* y = 2.0 */ y = floor(-2.8); /* y = -3.0 */ Имя функции: FMOD #include <math.h> double fmod(x,y); double x; значение с плавающей точкой. double y; Описание: Функция fmod вычисляет остаток от деления x на y с плавающей точкой, где x=iy+f, i - целое, f - имеет тот же знак, что x; а абсолютное значение x меньше, чем абсолютное значение y. Возвращаемое значение.: Функция fmod возвращает остаток с плавающей точкой. Если y равно 0, функция возвращает 0. Пример: #include <math.h> double x,y,z; x = -10.0; y = 3.0; z = fmod(x,y); /* z = -1.0 */. Пример: #include <math.h> int errno; main() { float x,y; for (errno=EDOM; errno==EDOM; y=asin(x)) { printf("Sine="); scanf("%f", &x); errno = 0; } printf("Arc sine of %f\n",x,y);} На выходе: Sine = -1.001 asin: DOMAIN error Sine = -1 Arc sine of -1.000000=-1.570796 Имя функции: LDEXP #include <math.h> double ldext(x,exp); double x; значение с плавающей точкой int *exp; целая экспонента Описание.: Функция ldexp возвращает x, умноженное на 2 в степени exp. Возвращаемое значение: ldexp возвращает x, умноженное на 2 в степени exp.В случае переполнения результата функция возвращает +HUGE или -HUGE (в зависимости от знака x) и устанавливает errno в ERANGE. Пример: #include <math.h> double x,y; int p; x = 1.5; p = 5; y = ldexp(x,p); /* y = 48.0 */ Имя функции: POW #include <math.h> double pow(x,y); double x; возводимое число double y; степень числа x Описание: Функция pow вычисляет x, возведенное в степень y. Возвращаемое значение: Функция pow возвращает значение x в степени y. Если y равна 0, pow возвращает значение 1. Если x равно 0 и y отрицательная, pow устанавливает errno в ERANGE и возвращает HUGE. Если x отрицательное, а y не является целой, функция печатает сообщение об ошибке DOMAIN в stderr, устанавливает errno в ERANGE и возвращает либо положительное, либо отрицательное значение HUGE. В случае переполнения или потери значимости никакого сообщения не печатается. Пример: #include <math.h> double x = 2.0, y = 3.0, z; z = pow(x,y); /* z = 8.0 */ Имя функции: SIN-SINH #include <math.h> double sin(x); вычисляет синус x double sinh(x); вычисляет гиперболический синус x double x; радиан Описание: Функции sin и sinh вычисляют соответственно синус и гиперболический синус x. Возвращаемое значение.:Функция sin возвращает синус x. Если x большой, то может возникнуть частичная потеря значимости результата. В этом случае sin вырабатывает ошибку PLOSS, но сообщения не печатает. Если x настолько большой, что теряется общая значимость результата, тогда sin печатает сообщение об ошибке TLOSS в stderr и возвращает 0. В обоих случаях errno устанавливается в ERANGE. Функция sinh возвращает гиперболический синус x. Если результат большой, sinh возвращает значение HUGE (отрицательное или положительное, в зависимости от знака x) и устанавливает errno в ERANGE. Обрaботкa ошибок может быть модифицировaнa при изменении процедуры matherr. Пример: #include <math.h> double pi = 3.1415926535,x,y; x = pi/2;); y = sin(x); /* y равен 1.0 */ y = sinh(x); /* y равен 2.3 */ Имя функции: SQRT #include <math.h> double sqrt(x); double x; неотрицательное значение с плавающей точкой Описание: Функция sqrt вычисляет квадратный корень x. Возвращаемое значение: Функция sqrt возвращает результат вычисления квадратного корня. Если x - отрицательное, функция печатает сообщение об ошибке DOMAIN в stderr, устанавливает errno в EDOM и возвращает 0. Обрaботкa ошибок может быть модифицировaнa при изменении процедуры matherr. Пример: #include <math.h> #include <stdlib.h> double x,y,z; if ((z = sqrt(x+y))==o.0) if((x+y) < 0.0) perror("sqrt of a negative number"); Имя функции: TAN-TANH #include <math.h> double tan(x); вычисляет тангенс x double tanh(x); вычисляет гиперболический тангенс x double x; радиан Описание: Функции tan и tanh вычисляют соответственно тангенс и гиперболический тангенс x. Возвращаемое значение: Функция tan возвращает тангенс x. Если x большой, при вычислениях может возникнуть частичная потеря значимости. В этом случае tan вырабатывает ошибку PLOSS, но сообщения не печатает. Если x настолько большой, что общая значимость результата теряется, тогда tan печатает сообщение об ошибке TLOSS в stderr и возв ращает 0. В обоих случаях errno устанавливается в ERANGE. Функция tanh возвращает гиперболический тангенс x. Возвращаемого значения в случае ошибки нет. Пример: #include <math.h> double pi,x,y; pi = 3.1415926535; x = tan(pi/4.0); /* x равен 1.0 */ y = tanh(x); /* y равен 1.6 */ 3. Математические ошибки Ошибки, приведенные ниже, порождаются математическими процедурами библиотеки Си. Эти ошибки соответствуют только тем типам ошибок, которые объявлены в <math.h>, и возвращаются функцией matherr. Таблица 1. |
Ошибка | Описание | | DOMAIN | Аргумент для функции находится вне области определения функции. (например log(-1)); | | OVERFLOW | Результат очень большой для предоставления его в возвращаемом значении. (например exp(1000)); | | PLOSS | Возникла частичная потеря значимости. | | SING | Особенность аргумента: аргумент для функции имеет неверное значение(например, пересылается значения 0 к той функции, которая требует ненулевого значения). (например pow(0,-2)); | | TLOSS | Возникла общая потеря значимости. (например sin(10e70)) | | UNDERFLOW | Результат очень маленький для предоставления его в возвращаемом значении. (например exp(-1000)); | | |
Страницы: 1, 2, 3
|