sonyps4.ru

Интерактивный учебник языка Python. Стандартные математические функции в языке си

Математические функции языка С


В языках С и C++ определено множество разнообразных математических функций. Сначала оба языка поддерживали один и тот же набор, состоящий из 22 математических функций. Однако по мере развития языка C++ расширялся и арсенал определенных в нем функций. Затем в версии С99 размер математической библиотеки значительно увеличился. В результате этих изменений библиотеки математических функций языков С и C++ стали существенно отличаться одна от другой. Поэтому в данной главе описываются математические функции языка С(включая те, которые добавлены в версии С99), а в главе 9 уделено внимание исключительно функциям языка C++. При этом имейте в виду, что исходный набор математических функций по-прежнему поддерживается всеми версиями языков С и C++.

Для использования всех математических функций в программу необходимо включить заголовок . Помимо объявления математических функций, этот заголовок определяет один или несколько макросов. В версии С89 заголовком определяется только макрос HUGE_VAL, который представляет собой значение типа double, сигнализирующее о возникшем переполнении.

В версии С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^ехр.

Последнее обновление: 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

Структура программы на языке Си

1. #include cstdlib.h .

2. #include - подключить заголовочный файл iostream.h .

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.

Для использования всех вышеперечисленных функций подключите библиотеку

В C++ определены следующие арифметические операторы.

Cложение;

– вычитание;

* умножение

/ деление

% деление по модулю

– – декремент (уменьшение на 1)

Инкремент (увеличение на 1).

Действие операторов +, –, * и / совпадает с действием аналогичных опера­торов в алгебре. Их можно применять к данным любого встроенного числового типа.

После применения оператора деления (/) к целому числу остаток будет отбро­шен. Например, результат целочисленного деления 10/3 будет равен 3. Остаток от деления можно получить с помощью оператора деления по модулю (%). На­пример, 10%3 равно 1. Это означает, что в С++ оператор % нельзя применять к нецелочисленным типам данных.

Операторы инкремента (++) и декремента (– –) обладают очень интересными свойствами. Поэтому им следует уделить особое внимание.

Оператор инкремента выполняет сложение операнда с числом 1, а оператор декремента вычитает 1 из своего операнда. Это значит, что инструкция:

аналогична такой инструкции:

А инструкция:

аналогична такой инструкции:

Операторы инкремента и декремента могут стоять как перед своим операн­дом (префиксная форма), так и после него (постфиксная форма). Например, ин­струкцию

можно переписать в виде префиксной

Х;//префиксная форма оператора инкремента

или постфиксной формы:

х++;//постфиксная форма оператора инкремента

В предыдущем примере не имело значения, в какой форме был применен опе­ратор инкремента: префиксной или постфиксной. Но если оператор инкремента или декремента используется как часть большего выражения, то форма его при­менения очень важна. Если такой оператор применен в префиксной форме, то C++ сначала выполнит эту операцию, чтобы операнд получил новое значение, которое затем будет использовано остальной частью выражения. Если же опера­тор применен в постфиксной форме, то С++ использует в выражении его старое значение, а затем выполнит операцию, в результате которой операнд обретет но­вое значение.

Математические функции

В языке С++ имеются специальные функции для расчета алгебраических выражений. Все такие функции находятся в отдельном заголовочном файле math.h. Поэтому для использования функций в коде программы необходимо подключить данный файл с помощью директивы

#include

Приведем основные алгебраические функции С++.

abs(x) - модуль целого числа;

labs(x) - модуль «длинного» целого;

fabs(x) - модуль числа с плавающей точкой;

sqrt(x) - извлечение квадратного корня;

pow(x,y) - возведение x в степень y;

cos(x) - косинус;

sin(x) - синус;

tan(x) - тангенс;

acos(x) - арккосинус;

asin(x) - арксинус;

atan(x) - арктангенс;

exp(x) - експонента в степени x;

log(x) - натуральный логарифм;

log10(x) - десятичный логарифм

При возведении числа в дробную степень, знаменатель дробной степени нужно записывать в вещественном виде. Например: квадратный корень из а записывается так: pow(a,1/2.0 )

Продемонстрируем использование функций на примерах.

5. Операторы ввода/вывода на языке С++

Для вывода сообщения на экран используется следующий оператор C++:

cout<<”текст”;

#include

Информация, заключенная в двойные кавычки, яв­ляется сообщением, которое должно быть выведено на экран. В языке C++ любая последовательность симво­лов, заключенная в двойные кавычки, называется стро­кой потому, что она состоит из не­скольких символов, соединяемых вместе в более крупный блок (элемент).

Строка в операторе COUT может содержать так называемые подстановочные символы - символы, которых нет на клавиатуре или они заняты под ключевые символы в тексте программы. Перед каждым таким подстановочным символов ставится символ «\».

Приведем перечень таких символов:

\a – звуковой сигнал

\n – переход на новую строку

\t – горизонтальная табуляция

\v – вертикальная табуляция

\\ - обратный слеш

\’ – одинарная кавычка

\” – двойная кавычка

\? – знак вопроса.

Например, оператор вида:

cout>>“пример\nтекста”;

Слово «пример» выведет на одной строке, а слово «текста» на другой.

Оператор вида:

cout>>“магазин\»”чайка\””;

Слово «Чайка» отобразит в двойных кавычках.

Кроме текса оператор может выводить на экран значения переменных, комбинируя их с текстом.

cout<<”a=”<

Форматированный вывод

Для выдачи значений заданной длины или точности оператор cout имеет ряд настроек:

    cout.width(число) – общая длина выводимого значения

    cout.precision(число) – число знаков после запятой

    cout.fill(‘символ-заполнитель’) – символ, которым заполняются лишние позиции на экране

Настройка cout.width после выполнения одного оператора вывода сбрасывается в начальное значение. Поэтому ее приходится указывать отдельно для каждой переменной или строки.

Настройки этих параметров должны проводиться до вызова оператора вывода.

Например:

//описываем переменные

float a=125.478, b=625.365;

//задаем число знаков поле запятой

cout.precision(2);

//задаем заполнитель для лишний позиций

cout.fill(‘0’);

//выдаем значения переменных на экран

cout<<”a=”;

cout<<” b=”;

//задаем общую длину для числа

Регулировка ширины поля (width) и заполнителя (fill) имеет смысл при выдачи данных в таблицу. Чаще всего можно обойтись только настройкой precision.

Очистка экрана

Язык С++ имеет функцию, позволяющую очищать экран от текстовой информации. Эта функция имеет вид:

Данная функция находится в заголовочном файле conio.h. Поэтому для ее использования данный файл должен быть подключен с помощью директивы:

#include

Организация паузы для просмотра результата

После выполнения программы обычно происходит автоматичский возврат в окно с исходным текстом. Это не позволяет просмотреть результат, который программа выдает на экран. Выходом из этой ситуации может быть использование клавиш Alt+F5, при нажатии на которые происходит скрытие окна с кодом программы. Повторное нажатие на эти клавиши возвращает окно с кодом на экран.

Однако, если создать исполняемый EXE файл, то использовать эти клавиши будет невозможно и результат останется невидимым для пользователя.

Для решения данной проблемы в конце программы можно добавлять функцию, которая приостанавливает работу до нажатия любой клавиши. Эта функция имеет вид:

getch ();

Данная функция находится в заголовочном файле conio.h. Поэтому для ее использования данный файл должен быть подключен с помощью директивы:

#include

Оператор ввода данных с клавиатуры

Для вода данных с клавиатуры в С++ имеется оператор:

cin>>переменная;

Данный оператор приостанавливает работу программы и ждет пока пользователь не введет значение переменной и на нажмет ENTER.

C помощью одного оператора можно ввести значения нескольких переменных. Для этого оператор записывают в виде:

cin>>переменная1>>переменная2>>. . .>>переменнаяn;

При запуске программы каждое значение вводится через пробел и в конце нажимают ENTER.

Оператор COUT находится в заголовочном файле iostream.h. Поэтому для его использования данный файл нужно подключить с помощью директивы:

#include (начало)

6. Пример программы на С++

Для демонстрации решим одну задачу. Составить программу для нахождения значения функции:

Программа может иметь вид:

//подключаем файл для организации ввода/вывода

#include

//подключаем файл для использования алгебраических функций

#include

//подключаем файл для вызова функции очистки экрана

#include

//заголовок главной программы

//описываем три переменных вещественного типа

//очищаем экран

//выдаем текстовую подсказку на экран

cout<<"Введите значения a и b:";

//запрашиваем ввод с клавиатуры двух переменных: a и b

//считаем значение функции

c=sin(a)+pow(cos(b),2);

//устанавливаем точность вывода результата 3 знака полсе запятой

cout.precision(3);

//выводим результат на экран

cout<<"Функция равна:"<

cout<<"Для продолжения нажмите любую клавишу. . .";

//делаем паузу для просмотра результата

//завершаем работу главной программы

Для всех математических функций необходим заголовок . В программах на языке C используется заголовок

1 acos Функция double acos(double arg arg
2 asin Функция double asin(double arg ) возвращает арккосинус аргумента arg . Значение аргумента функции должно лежать в интервале от -1 до 1, иначе произойдет ошибка.
3 atan Функция double atan(double arg ) возвращает арктангенс аргумента arg .
4 atan2 Функция double atan2(double x , double y ) возвращает арктангенс значения y /x .
5 ceil Функция double ceil(double num ) возвращает ближайшее целое число (представленное как действительное число с плавающей точкой), которое не меньше значения аргумента num . Например, ceil(1.02) вернет 2.0. Такое преобразование называется округлением с избытком.
6 cos Функция double cos(double arg ) возвращает косинус аргумента arg
7 cosh Функция double cosh(double arg ) возвращает гиперболический косинус аргумента arg .
8 exp Функция double exp(double arg ) возвращает основание натурального логарифма e, возведенное в степень arg .
9 fabs Функция double fabs(double num ) возвращает абсолютное значение (значение по модулю) аргумента num .
10 floor Функция double floor(double num ) возвращает наибольшее целое число (представленное как действительное число с плавающей точкой), не превышающее значения аргумента num . Например, floor(1.02) вернет число 1.0. Такое преобразование называется округлением с недостатком.
11 fmod Функция double fmod(double x, double y) возвращает остаток от деления x/y.
12 frexp Функция double frexp(double num , int *exp ) раскладывает число num на мантиссу, изменяющуюся в диапазоне от 0.1 до 1, не включая 1, и целый показатель степени, так что num = mantissa . Функция возвращает мантиссу, а значение показателя степени сохраняется в переменной, на которую ссылается указатель exp .
13 log Функция double log(double num ) возвращает натуральный логарифм числа num . Если аргумент num
14 log10 Функция double log10(double num ) возвращает десятичный логарифм числа num . Если аргумент num отрицателен или равен нулю, возникает ошибка.
15 pow Функция double pow(double base , double exp ) возвращает число base , возведенное в степени exp . Если основание степени base равно нулю, а показатель степени exp меньше или равен нулю, может произойти ошибка, связанная с выходом аргумента из области определения функции (domain error). Это ошибка возникает также, если аргумент base отрицателен, а аргумент exp не является целым числом.
16 sin Функция double sin(double arg ) возвращает синус аргумента arg . Значение аргумента должно быть выражено в радианах.
17 sinh Функция double sinh(double arg ) возвращает гиперболический синус аргумента arg .
18 sqrt Функция double sqrt(double num ) возвращает квадратный корень аргумента num . Если значение аргумента отрицательно, возникает ошибка, связанная с выходом из области определения функции.
19 tan Функция double tan(double arg ) возвращает тангенс аргумента arg . Значение аргумента должно быть выражено в радианах.
20 tanh Функция double tanh(double arg ) возвращает гиперболический тангенс аргумента arg .


Загрузка...