- •Глава 4 функции
- •Параметры и аргументы функций
- •Аргументы по умолчанию
- •Области видимости. Локальные и глобальные переменные
- •Операция ::
- •Классы памяти
- •Автоматические переменные
- •Регистровые переменные
- •Внешние переменные и функции
- •Статические переменные
- •Переменные класса volatile
- •Volatile short sTest; volatile const int vciTest;
- •Новый стиль заголовков
- •Пространства имен
- •Встраиваемые (inline-) функции
- •Рекурсивные функции
- •Математические функции
- •Inline double sqr(double X) {return pow(X, 2);}
- •Функции округления
Математические функции
Прототипы стандартных математических функций определены в заголовочном файле math.h. Рассмотрим некоторые из них, наиболее часто употребляемые в повседневной работе.
Ранее уже упоминалась функция pow (), позволяющая возводить число в степень. Синтаксис данной функции выглядит следующим образом:
double pow(double x, double у);
Таким образом, компилятору сообщается, что необходимо число двойной точности х возвести в степень числа двойной точности у.
К данной категории также относятся логарифмические функции и функция извлечения корня числа:
double log(double);
// натуральные float logf ( float );
long double log1(long double);
double log10(double);
// десятичные
float log10f (float);
long double log101(long double);
double sqrt(double);
// корень числа
float sqrtf(float);
long double sqrt1(long double);
Другая большая группа - функции получения абсолютной величины числа,
int abs(int);
// целые
double fabs(double);
// двоимой точности long labs(long);
// длинные
float fabsf(float);
// с плавающей точкой
long double fabsl(long double);
// длинные
// двойной
// точности
воспринимают в качестве параметра аргумент некоторого типа (свой для каждой из функций) и возвращают его беззнаковую форму.
Для вычисления остатка от деления числа х на у используется функция fmod (), которая имеет следующий синтаксис:
double fmod(double x, double у);
Стандартная библиотека располагает широким набором тригонометрических функций и их модификаций для различных типов аргументов:
// Арккосинус: double acos(double);
float acosf(float);
// Арксинус:
double asm (double) ;
float asinf(float);
// Арктангенс: double atan(double);
float atanf(float);
// Арктангенс отношения y/x:
double atan2(double x, double y);
float atan2f(float, float);
// Косинус:
double cos(double);
float cosf(float);
// Гиперболический косинус:
double cosh(double);
float coshf(float);
// Синус:
double sin(double);
float sinf(float);
// Гиперболический синус:
double sinh(double);
float sinhf(float);
// Тангенс:
double tan(double);
float tanf(float);
// Гиперболический тангенс:
double tanh(double);
float tanhf(float);
Следует отметить, что углы тригонометрических функций указываются в радианах. Ниже приводится пример, осуществляющий перевод градусов в радианы и вывод значения синуса для введенного в градусах числа.
#includa <iostream.h>
#include <math.h>
int main()
{
double Angle;
double PI = 3.14159;
cout « "Введите угол в градусах: ";
cin » Angle;
cout « "Значение синуса: ";
cout « sin(Angle * PI / 180) « '\n';
return 0;
}
К сожалению, в C++ нет готовой реализации функции возведения аргумента в квадрат. Эту функцию можно реализовать, например, следующим образом:
Inline double sqr(double X) {return pow(X, 2);}
Заметим, что для работы данной функции необходимо задействовать заголовочный файл math.h, содержащий прототип функция pow ().
Функции округления
Зачастую требуется воспользоваться округленным значением той или иной переменной C++ предлагает набор функций для решения этой задачи. В зависимости от конкретной ситуации может понадобиться функция, округляющая значение аргумента в большую иди меньшую сторону. Рассмотрим наиболее часто используемые варианты вызовов.
Для округления числа в меньшую сторону используется функция floor () и ее разновидности для различных типов аргументов и возвращаемых параметров. Данная функция имеет следующий синтаксис:
double floor(double x);
long double floor1(long double x) ;
Округление в большую сторону производится с помощью функции ceil ():
double ceil(double x);
long double ceil(long double x);
Однако в реальности проблема выбора в какую же сторону производить округление, возлагается на разрабатываемую программу. Ниже предлагается два варианта решения этой задачи.
Вариант 1:
inline double Round(double x) {return floor(x + .5);}
Вариант 11:
double round(double num)
{
double frac;
double val;
frac = modf(num, &val);
if(frac < 0.5) num = val;
else num = val + 1.0;
return num;
}
Для работы обоих вариантов функции необходимо задействовать заголовочный файл math.h, содержащий прототип функций floor() и modf().