Math.h — заголовочный файл стандартной библиотеки языка С, разработанный для выполнения простых математических операций. Поскольку С++ также реализует данные функции для обеспечения совместимости (все они содержатся в заголовочном файле cmath) ми будем рассматривать эти языки вместе. Под Linux и FreeBSD математические функции хранятся отдельно в математической библиотеке libm. Таким образом, если любая из этих инструкций используется, при сборке линкеру должна быть передана опция -lm. Так как в результате большинства математических операций получатся дробные числа, все функции библиотеки принимают double. Для работы с типами float и long double используются функции с постфиксами f и l соответственно.
Complex.h — заголовочный файл стандартной библиотеки языка программирования С, в котором объявляются функции для комплексной арифметики. Эти функции используют встроенный тип complex, который появился в стандарте C99. Функции в заголовочном файле complex.h представлены для трёх типов— double, float и long double (значения представлены в радианах): для вычисления тригонометрических значений синуса, косинуса, тангенса и котангенса для комплесных чисел, логарифм и экспонент, корень.
GNU (GSL) — это свободное программное обеспечение под лицензией GNU General Public License. Библиотека предоставляет широкий спектр математических процедур, таких как генераторы случайных чисел, специальных функций и наименьших квадратов. Есть более 1000 функций в общей сложности с обширным набором тестов. В отличие от лицензий собственных численных библиотек лицензия GSL не ограничивает научное сотрудничество. Для подключения библиотеки вы должны написать: $\# include <GSL / gsl_-math.h>$. Чтобы использовать в C ++ обработку исключений в рамках пользовательских функций, переданных в библиотеку в качестве параметров, библиотека должна быть построена с опцией компиляции -fexceptions. Библиотека может быть использована в многопоточных программах. Все функции поточные в том смысле, что они не используют статические переменные. Память всегда связана с объектами, а не с функциями. Для функций, объекты которых используют рабочее пространство в качестве временного хранилища рабочие области должны быть выделены на основе каждого потока. Для функций, которые используют табличные объекты, память может использоваться несколькими потоками одновременно. Таблица аргументов всегда объявляются константой в прототипах функций, чтобы показать, что они могут быть безопасно доступны из различных потоков.
Вот примерные программы на С++ с использованием математических библиотек:
Пример 1
Найти синус и косинус А
#include // библиотека ввода-вывода
#include <math.h> // математическая библиотека
using namespace std;
int main()
{
double a,b,c; // переменные типа double
cout << «Input A = »; cin>>a; //ввод а
b=cos(a); //присваивание значений
c=sin(a); //
cout << «Cos A = „<<b<<endl; cout << “Sin A = „<<c; //вывод а
return 0;
}
Вывод программы:
Пример 2
Найти exp от числа А
#include // библиотека ввода-вывода
#include <math.h> // математичекая библиотека
#include <conio.h>
#include <windows.h>
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
double a,b,c; // переменные типа double
cout << “Input A = »; cin>>a; //ввод а
b=ceil(a); //присваивание значаный
c=exp(a); //
cout << «Большее целое число A = „<<b<<endl; cout << “Exp A = „<<c; //вывод а
getch();
return 0;
}
Вывод программы:
Пример 3
Возведите число в степень по заданным значениям
#include // библиотека ввода-вывода
#include <math.h> // математичекая библиотека
#include <conio.h>
#include <windows.h>
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
double a,b; // переменные типа double
cout << “Введите число = »; cin>>a;
cout << «Введите степень = »; cin>>b;
b=pow(a,b);
cout << «Число в степени = „<<b<<endl;
getch();
return 0;
}
Вывод программы:
Пример 4
Решение квадратного уравнения
# include <stdio.h>
# include # include <gsl/gsl_poly.h>
using namespace std;
int main ()
{
int i;
double a = 1, b = 2, c = 1;
double x0, x1;
i = gsl_poly_solve_quadratic ( a, b, c, &x0, &x1 );
if ( i == 2 ) cout << “x0 =»<< x0 << " x1 ="<< x1 << endl;
if ( i == 1 ) cout<< «x0 = » << x0 << endl;
if ( i == 0 ) cout<< «No solve » << endl;
return 0;
}
Вывод программы:
Пример 5
Как использовать статистические функции
#include <stdio.h>
#include <gsl/gsl_statistics.h>
int main(void)
{
double data[5] = {17.2, 18.1, 16.5, 18.3, 12.6};
double mean, variance, largest, smallest;
mean = gsl_stats_mean(data, 1, 5);
variance = gsl_stats_variance(data, 1, 5);
largest = gsl_stats_max(data, 1, 5);
smallest = gsl_stats_min(data, 1, 5);
printf («The dataset is \%g, \%g, \%g,\%g, \%g \ n»,
data[0], data[1], data[2], data[3], data[4]);
printf («The sample mean is \%g\ n», mean);
printf («The estimated variance is \%g\ n», variance);
printf («The largest value is \%g \ n», largest);
printf («The smallest value is \%g \ n», smallest);
return 0;
}
Вывод программы: