Інтерактивний підручник з мови Python. Математичні обчислення та клас Math

Для всіх математичних функцій потрібний заголовок . У програмах мовою 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.

У 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.

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

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++ визначено безліч різноманітних математичних функцій. Спочатку обидві мови підтримували той самий набір, що складається з 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^ехр.

Для цілих чисел визначено операції +, -, * і **. Операція поділу / для цілих чисел повертає дійсне число (значення типу float). Також функція зведення в ступінь повертає значення типу float, якщо показник ступеня негативне число.

Але є і спеціальна операція цілісного поділу, що виконується з відкиданням дробової частини, що позначається // (Вона відповідає операції div в Паскалі). Вона повертає ціле число: цілу частину частки. Інша близька їй операція – це операція взяття залишку від поділу, що позначається % (вона відповідає операції mod Паскале). Наприклад:

Print(17 / 3) # виведе 5.66666666667 print(17 // 3) # виведе 5 print(17 % 3) # виведе 2

Деякі з перерахованих функцій (int, round, abs) є стандартними і не вимагають підключення модуля math для використання.

Функція Опис
Округлення
int(x) Округлює число убік нуля. Це стандартна функція, її використовувати не потрібно підключати модуль math .
round(x) Округлює число до найближчого цілого. Якщо дробова частина числа дорівнює 0.5, число округляється до найближчого парного числа.
round(x, n) Округлює число x до знаків n після точки. Це стандартна функція, її використовувати не потрібно підключати модуль math .
floor(x) Округлює число вниз («підлога»), при цьому floor(1.5) == 1 , floor(-1.5) == -2
ceil(x) Округлює число вгору («стеля»), при цьому ceil(1.5) == 2 ceil(-1.5) == -1
abs(x) Модуль (абсолютна величина). Це стандартна функція.
Коріння, логарифми
sqrt(x) Квадратний корінь. Використання: sqrt(x)
log(x) Натуральний логарифм. При виклику у вигляді log(x, b) повертає логарифм на основі b .
e Основа натуральних логарифмів e = 2,71828.
Тригонометрія
sin(x) Синус кута, що задається в радіанах
cos(x) Косинус кута, що задається в радіанах
tan(x) Тангенс кута, що задається в радіанах
asin(x) Арксинус повертає значення в радіанах
acos(x) Арккосинус повертає значення в радіанах
atan(x) Арктангенс повертає значення в радіанах
atan2(y, x) Полярний кут (радіани) точки з координатами (x, y).
degrees(x) Перетворює кут, заданий у радіанах, градуси.
radians(x) Перетворює кут, заданий у градусах, на радіани.
pi Константа π = 3.1415...