Стандартні математичні функції у мові сі. Інтерактивний підручник з мови Python

Для цілих чисел визначено операції +, -, * і **. Операція поділу / для цілих чисел повертає дійсне число(значення типу 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...

Будь ласка, припиніть роботу 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 #include // підключаємо math.h int main (void) ( int a, b, c2; scanf("%d",&a); scanf("%d",&b); c2 = a*a + b*b; printf ("c = %.2f\n", sqrt(c2)); return 0;

Обчислити синус кута введеного з клавіатури. Кут вводиться у градусах.

Лістинг 2.

#include #include // підключаємо math.h int main (void) (double alpha, sin_a, pi = 3.1415926; scanf ("% lf", & alpha); alpha = alpha * pi/180; sin_a = sin (alpha); .2f\n", sin_a); return 0; )

У цій програмі є про що поговорити. Тригонометричні функції, які визначені в math.h працюють з радіанною мірою кута. Людям же звичніше працювати із градусами. Тому в цій програмі ми попередньо перевели значення із градусів у радіани. Якщо цього не зробити, результат буде неправильним. Перевірте це самостійно.

Неявне перетворення типів

При явному перетворенні типу ми в дужках перед значенням вказували тип, якого потрібно привести дане значення. У неявному перетворенні цього не потрібно. Компілятор автоматично підбере потрібний тип.

Неявне перетворення типів здійснюється у таких випадках:

  1. перед передачею аргументів у функцію (як у прикладі з коренем. Листинг 1.)
  2. виконання арифметичних операцій з різними типамиаргументів
  3. перед виконанням присвоєння

Правила неявного перетворення типів

  • якщо виконуються арифметичні операціїіз різними типами аргументів. Обидва аргументи наводяться до більшого типу.
    Порядок типів: int< float < double
  • при присвоєння. Значення праворуч від оператора присвоювання наводиться типу змінної зліва від оператора присвоювання. При цьому, якщо більший типприсвоюється меншому, може статися втрата точності.

int+float буде автоматично перетворено на float+float
float/int буде автоматично перетворено на float/float
double*float буде перетворено на double*double
int = double double буде перетворено на int з втратою дробової частини
float = int int буде перетворено на float

Усі математичні функції реалізовані як методи класу Math, основні з яких представлені у таблиці 4.1

Таблиця 4.1 – Основні поля та методи класу Math

Ім'я методу

Опис

Пояснення

|x|, записується як Abs(x)

Арккосінус

Acos(double x), кут задається в радіанах

Арксинус

Арктангенс

Арктангенс

Atan2(double x, double y) – кут, тангенс якого є результатом поділу y на х

твір

BigMul(int x, int y)

Округлення до більшого цілого

Celling(double x)

Гіперболічний косинус

Поділ та залишок

2,71828182845905

експонента

Округлення до меншого цілого

Floor(double x)

Залишок від ділення

IEEERemainder(double x, double y)

Натуральний логарифм

Десятковий логарифм

Максимум із 2-х чисел

Продовження таблиці 4.1

Ім'я методу

Опис

Пояснення

Мінімум із 2-х чисел

Значення числа пі

3,14159265358979

Зведення в ступінь

Pow(x,y) – x у ступені y

Округлення

Round(3.1)=3 Round(3.8)=4

Знак числа

Гіперболічний синус

Квадратний корінь

Гіперболічний тангенс

Приклад лінійної програми розрахунку за заданою формулою

namespace ConsoleApplicationl

( static void Main()

Console.WriteLine("Введіть x");

buf=Console.ReadLine();

double x=Convert.ToDouble(buf);

Console.WriteLine("Введіть alfa");

buf=Console.ReadLine();

double a = double.Parse (buf);

double y=Math.Sqrt(Math.PI*x)-

Math.Exp(0.2*Math.Sqrt(a))+

2*Math.Tan(2*a)+

1.6e3*Math.Log10(Math.Pow(x,2));

Console.WriteLine("Для х = (0) і alfa = (1)", x, a);

Console.WriteLine("Результат =" + y); )))

Лекція 5. Оператори мови c#

Склад операторів мови C#, їх синтаксис та семантика успадковані від мови С++. Будь-який вираз, що завершується крапкою з комою, є оператором.

Блок або складовий оператор

За допомогою фігурних дужоккілька операторів мови (можливо, переміжних оголошеннями) можна об'єднати в єдину синтаксичну конструкцію, яка називається блоком або складовим оператором:

оператор_1

оператор_N

Синтаксично блок сприймається як одиничний оператор і може використовуватися усюди в конструкціях, де синтаксис вимагає одного оператора. Тіло циклу, гілки оператора if, як правило, видаються блоком.

Порожній оператор

Порожній оператор - це "порожньо", що завершується крапкою з комою. Він використовується коли за синтаксисом оператор потрібен, а за змістом-ні. Іноді корисно розглядати відсутність операторів як існуючий порожній оператор. Синтаксично допустимо ставити зайві крапки з комою, вважаючи, що вставляються порожні оператори. Наприклад, синтаксично допустима наступна конструкція:

for (int j = 1; j<5; j++) //оператор цикла

(;;;;); //Порожній оператор

Вона може розглядатися як затримка часу, робота на холостому ході.

Математичні функції мови С


У мовах С та 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 негативне. Якщо значення дорівнює 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