Стандартные математические функции в c. Математические вычисления и класс Math
Последнее обновление: 31.10.2015
Для выполнения различных математических операций в библиотеке классов.NET предназначен класс Math . Он является статическим, поэтому все его методы также являются статическими.
Рассмотрим методы класса Math:
Abs(double value) : возвращает абсолютное значение для аргумента value
Double result = Math.Abs(-12.4); // 12.4
Acos(double value) : возвращает арккосинус value. Параметр value должен иметь значение от -1 до 1
Double result = Math.Acos(1); // 0
Asin(double value) : возвращает арксинус value. Параметр value должен иметь значение от -1 до 1
Atan(double value) : возвращает арктангенс value
BigMul(int x, int y) : возвращает произведение x * y в виде объекта long
Double result = Math.BigMul(100, 9340); // 934000
Ceiling(double value) : возвращает наименьшее целое число с плавающей точкой, которое не меньше value
Double result = Math.Ceiling(2.34); // 3
Cos(double d) : возвращает косинус угла d
Cosh(double d) : возвращает гиперболический косинус угла d
DivRem(int a, int b, out int result) : возвращает результат от деления a/b, а остаток помещается в параметр result
Int result; int div = Math.DivRem(14, 5, out result); //result = 4 // div = 2
Exp(double d) : возвращает основание натурального логарифма, возведенное в степень d
Floor(decimal d) : возвращает наибольшее целое число, которое не больше d
Double result = Math.Floor(2.56); // 2
IEEERemainder(double a, double b) : возвращает остаток от деления a на b
Double result = Math.IEEERemainder(26, 4); // 2 = 26-24
Log(double d) : возвращает натуральный логарифм числа d
Log(double a, double newBase) : возвращает логарифм числа a по основанию newBase
Log10(double d) : возвращает десятичный логарифм числа d
Max(double a, double b) : возвращает максимальное число из a и b
Min(double a, double b) : возвращает минимальное число из a и b
Pow(double a, double b) : возвращает число a, возведенное в степень b
Round(double d) : возвращает число d, округленное до ближайшего целого числа
Double result1 = Math.Round(20.56); // 21 double result2 = Math.Round(20.46); //20
Round(double a, round b) : возвращает число a, округленное до определенного количества знаков после запятой, представленного параметром b
Double result1 = Math.Round(20.567, 2); // 20,57 double result2 = Math.Round(20.463, 1); //20,5
Sign(double value) : возвращает число 1, если число value положительное, и -1, если значение value отрицательное. Если value равно 0, то возвращает 0
Int result1 = Math.Sign(15); // 1 int result2 = Math.Sign(-5); //-1
Sin(double value) : возвращает синус угла value
Sinh(double value) : возвращает гиперболический синус угла value
Sqrt(double value) : возвращает квадратный корень числа value
Double result1 = Math.Sqrt(16); // 4
Tan(double value) : возвращает тангенс угла value
Tanh(double value) : возвращает гиперболический тангенс угла value
Truncate(double value) : отбрасывает дробную часть числа value, возвращаяя лишь целое значние
Double result = Math.Truncate(16.89); // 16
Также класс Math определяет две константы: Math.E и Math.PI . Например, вычислим площадь круга:
Console.WriteLine("Введите радиус круга"); double radius = Double.Parse(Console.ReadLine()); double area = Math.PI * Math.Pow(radius, 2); Console.WriteLine("Площадь круга с радиусом {0} равна {1}", radius, area);
Консольный вывод:
Введите радиус круга 20 Площадь круга с радиусом 20 равна 1256,63706143592
Пожалуйста, приостановите работу AdBlock на этом сайте.
Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.
Для использования математических функций нужно подключить заголовочный файл math.h . В ней определено много различных функций, но мы пока рассмотрим следующие:
Некоторые математические функции
fabs(x)
модуль числа x
sqrt(x)
квадратный корень из числа x
sin(x)
синус числа x (х в радианах)
cos(x)
косинус числа x (х в радианах)
pow(x, y)
вычисление x y
exp(x)
вычисление e x
log(x)
натуральный логарифм числа x
log10(x)
десятичный логарифм числа x
Два важных момента.
- Все функции возвращают значение типа double .
- Параметры функций – вещественные числа(double ), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа . Компилятор из целого числа, например 3, сделает вещественное 3.0.
Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы.
Простая задачка на знание теоремы Пифагора.
Листинг 1.
#include
Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.
Листинг 2.
#include
В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы . Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.
Неявное преобразование типов
При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип.
Неявное преобразование типов осуществляется в следующих случаях:
- перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
- выполнение арифметических операций с разными типами аргументов
- перед выполнением присваивания
Правила неявного преобразования типов
- если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
Порядок типов: int < float < double - при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.
int+float
будет автоматически преобразовано к float+float
float/int
будет автоматически преобразовано к float/float
double*float
будет преобразовано к double*double
int = double
double
будет преобразовано к int
с потерей дробной части
float = int
int
будет преобразовано к float
Математические функции языка С
В языках С и C++ определено множество разнообразных математических функций. Сначала оба языка поддерживали один и тот же набор, состоящий из 22 математических функций. Однако по мере развития языка C++ расширялся и арсенал определенных в нем функций. Затем в версии С99 размер математической библиотеки значительно увеличился. В результате этих изменений библиотеки математических функций языков С и C++ стали существенно отличаться одна от другой. Поэтому в данной главе описываются математические функции языка С(включая те, которые добавлены в версии С99), а в главе 9 уделено внимание исключительно функциям языка C++. При этом имейте в виду, что исходный набор математических функций по-прежнему поддерживается всеми версиями языков С и C++.
Для использования всех математических функций в программу необходимо включить заголовок
В версии С99 определены следующие макросы.
В версии С99 определены следующие макросы(подобные функциям), которые классифицируют значение.
В версии С99 определены следующие макросы сравнения, аргументами которых(a и b) должны быть значения с плавающей точкой.
Эти макросы прекрасно обрабатывают значения, которые не являются числами, не вызывая при этом исключений вещественного типа.
Макросы EDOM и ERANGE также используются математическими функциями. Эти макросы определены в заголовке
Ошибки в версиях С89 и С99 обрабатываются по-разному. Так, в версии С89, если аргумент математической функции не попадает в домен, для которого он определен, возвращается некоторое значение, зависящее от конкретной реализации, а встроенная глобальная целая переменная errno устанавливается равной значению EDOM. В версии С99 ошибка нарушения границ домена также приводит к возврату значения, зависящего от конкретной реализации. Однако по значению math_errhandling можно судить о выполнении других действий. Если math_errhandling содержит значение MATH_ERRNO, встроенная глобальная целая переменная errno устанавливается равной значению EDOM. Если же math_errhandling содержит значение MATH_ERREXCEPT, возбуждается исключение вещественного типа.
В версии С89, если функция генерирует результат, который слишком велик для возможностей представления, происходит переполнение. В этом случае функция возвращает значение HUGE_VAL, а переменная errno устанавливается равной значению ERANGE, сигнализирующему об ошибке диапазона. При обнаружении потери значимости функция возвращает нуль и устанавливает переменную errno равной значению ERANGE. В версии С99 ошибка переполнения также приводит к тому, что функция возвращает значение. HUGE_VAL, а при потере значимости - нуль. Если math_errhandling содержит значение MATH_ERRNO, глобальная переменная errno устанавливается равной значению ERANGE, свидетельствующему об ошибке диапазона. Если же math_errhandling содержит значение MATH_ERREXCEPT, возбуждается исключение вещественного типа.
В версии С89 аргументами математических функций должны быть значения типа double и значения, возвращаемые функциями, имеют тип double. В версии С99 добавлены float- и long double-варианты этих функций, которые используют суффиксы f и l соответственно. Например, в версии С89 функция sin() определена следующим образом.
Double sin(double arg);
В версии С99 поддерживается приведенное выше определение функции sin() и добавляются еще две ее модификации - sinf() и sinl().
Float sinf(float arg); long double sinl(long double arg);
Операции, выполняемые всеми тремя функциями, одинаковы; различаются лишь данные, подвергаемые этим операциям. Добавление f- и 1-модификаций математических функций позволяет использовать версию, которая наиболее точно соответствует вашим данным.
Поскольку в версии С99 добавлено так много новых функций, стоит отдельно перечислить функции, поддерживаемые версией С89(они также используются в языке C++).
acos | asin | atan | atan2 | ceil |
cos | cosh | exp | fabs | floor |
fmod | frexp | ldexp | log | log10 |
modf | pow | sin | sinh | sqrt |
tan | tanh |
И еще одно: все углы задаются в радианах.
Смотрите также
acos - Возвращает значение арккосинуса
acosh - Возвращает значение гиперболического арккосинуса
asin - Возвращает значение арксинуса
asinh - Возвращает значение гиперболического арксинуса
atan - Возвращает значение арктангенса
atan2 - Возвращает значение арктангенса от а/Ь
atanh - Возвращает значение гиперболического арктангенса
cbrt - Возвращает значение кубического корня
ceil - Возвращает наименьшее целое, которое больше значения заданого аргумента
copysign - Наделяет заданный аргумент знаком, который имеет указаный аргумент
cos - Возвращает значение косинуса
cosh - Возвращает значение гиперболического косинуса
erf - Возвращает значение функции ошибок
erfc - Возвращает дополнительное значение функции ошибок
exp - Возвращает значение экспоненты
exp2 - Возвращает число 2, возведенное в заданную степень
expm1 - Возвращает уменьшенное на единицу значение натурального логарифма е
fabs - Возвращает абсолютное значение
fdim - Возвращает нуль или разность в двух заданных аргументов
floor - Возвращает наибольшее целое которое меньше или равно значению заданного аргумента
fma - Возвращает значение а*Ь+с заданных аргументов
fmax - Возвращает большее из двух значений
fmin - Возвращает меньшее из двух значений
fmod - Возвращает остаток от деления
frexp - Разбивает заданное число на мантиссу и экспоненту
hypot - Возвращает длину гипотенузы при заданных длинах двух катетов
ilogb - Выделяет экспоненциальное значение
ldexp - Возвращает значение выражения num*2^ехр.
Структура программы на языке Си
1. #include
2. #include
3 . using name space std – использовать стандартное пространство имен
4. int main(int argc, char *argv) – имя функции. Любая программа на языке Си состоит из одной или нескольких функций. В написанном шаблоне функция одна – main(). Функция c именем main обязательно должна быть в любой исполняемой программе .
5. { - начало тела функции
6. system(“pause”) – вызов функции system с аргументом “pause”. Функция реализует ожидание нажатия клавиши.
7. оператор return с аргументом EXIT_SUCCESS – завершение функции main с кодом 0.
8. } – конец функции main.
Простые типы данных Си
Для представления целых величин в Си предусмотрены следующие типы данных:
Тип сhar. Занимает в памяти 1 байт. Используется для представления символов и целых чисел от 0 до 255 (-128 до 127).
Тип int . Занимает в памяти4 байта. Используется для представления целых чисел в диапазоне -2 147 483 648 до 2 147 483 647.
Тип float. Занимает в памяти 4 байта. Используется для представления чисел с плавающей точкой. от 3.4×10 -38 до 3.4×10 38 . Точность вычислений до 7 знаков после запятой.
Тип double. Занимает в памяти 8 байт. Используется для представления чисел с плавающей точкой. от 1.7×10 -308 до 1.7×10 308 . Точность вычислений до 15 знаков после запятой.
Тип void – пустой тип. Используется для описания функций.
Тип bool – логический тип. Может принимать 2 значения true или false.
Основные операторы Си
Оператор - это лексема, которая переключает некоторые вычисления, когда применяется к переменной или к другому объекту в выражении. Язык Си представляет большой набор операторов арифметических и логических операторов.
Таблица 4.1. Унарные операторы языка Си
Таблица 4.2. Бинарные операторы языка Си
Код оператора | Название | Результат операции | ||
Аддитивные операторы | ||||
+ | бинарный плюс | вычисление суммы, например: int x = 2,y = 1,z; z = x+y; | ||
- | бинарный минус | вычисление разности, например: int x = 2,y = 1,z; z = x-y; | ||
Мультипликативные операторы | ||||
* | умножение | вычисление произведения, например: int x = 2,y = 1,z; z = x*y; | ||
/ | деление | вычисление частного, например: int x = 12,y = 2,z; z = x/y; | ||
% | остаток | вычисление остатка от деления, например: int x = 12,y = 7,z; z = x%y; | ||
Логические операторы | ||||
&& | логическое AND (И) | проверка условий, связанных логическим И | ||
|| | логическое OR (ИЛИ) | проверка условий, связанных логическим ИЛИ | ||
Операторы присваивания | ||||
= | присваивание | присвоить переменной заданное значение или значение другой переменной | ||
Операторы отношения | ||||
< | меньше чем | x | ||
> | больше чем | x>y, х больше y | ||
<= | меньше чем или равно | x<=y, x меньше или равно y | ||
>= | больше чем или равно | x>=y, x больше или равно y | ||
Операторы эквивалентности | ||||
= = | равно | x= =y, х равно y | ||
!= | не равно | x!=y, x не равно y | ||
, | оператор перечисления | выполнить разделенные оператором действия слева направо, например y+=5,x-=4,y+=x; | ||
Библиотека математических функций math.h
Си поддерживает множество математических функций, прототипы которых описаны в файле math.h. Познакомимся с некоторыми из них.
abs(int x) возвращает модуль целого числа x . acos(double x) возвращает арккосинус числа x в радианах. asin(double x) возвращает арксинус числа x в радианах. atan(double x) возвращает арктангенс числа x в радианах. atof(char *s, double x) преобразует строку s в вещественное число x. cos(double x) возвращает косинус числа x (x задано в радианах) ceil(double x) округляет число x в большую сторону exp(double x) возвращает экспоненту числа x. fabs(double x) возвращает модуль вещественного числа x. sin(double x) возвращает синус числа x (x задано в радианах). sqrt(double x) возвращает квадрат числа x. tan(double x) возвращает тангенс числа x (x задано в радианах). | floor(double x) округляет число x в меньшую сторону fmod(double x, double y) возвращает остаток от деления числа x на число y. hipot(double x, double y) возвращает квадрат суммы числа x и числа y. log(double x) возвращает натуральный логарифм числа x. log10(double x) возвращает десятичный логарифм числа x. modf(double x,double& y) возвращает дробную часть числа x, по адресу y записывается целая часть исходного числа x. pow(double x, double y) возвращает x в степени y. |
Для использования всех вышеперечисленных функций подключите библиотеку