Математичні обчислення не обмежуються лише арифметичними діями. Крім них, можна ще зустріти коріння, модулі, логарифми, тригонометричні функції та ін. Навчимося ж використовувати подібні функції в своїх програмах.
Для використання математичних функцій потрібно підключити заголовний файл 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.
Приклади.
Дано довжини катетів прямокутного трикутника. Обчислити довжину гіпотенузи. Проста задачка на знання теореми Піфагора.
Обчислити синус кута ввёденного з клавіатури. Кут вводиться в градусах.
У цій програмі є про що поговорити. Тригонометричні функції, які визначені в math.h працюють з радіанної мірою кута. Людям же звичніше працювати з градусами. Тому в даній програмі ми попередньо перевели значення з градусів в радіани. Якщо цього не зробити, результат вийде неправильним. Перевірте це самостійно.
Неявне перетворення типів
При явному перетворенні типу ми в дужках перед значенням вказували тип, до якого потрібно привести дане значення. У неявному перетворенні цього робити не потрібно. Компілятор автоматично підбере необхідний тип.
Неявне перетворення типів здійснюється в наступних випадках:
- перед передачею аргументів на функцію (як в нашому прикладі з коренем. Лістинг 1.)
- виконання арифметичних операцій з різними типами аргументів
- перед виконанням присвоювання
Правила неявного перетворення типів
- якщо виконуються арифметичні операції з різними типами аргументів. Обидва аргументи наводяться до більшого типу.
Порядок типів: int- при присвоєнні. Значення праворуч від оператора присвоювання приводиться до типу змінної зліва від оператора присвоювання. При цьому, якщо більший тип присвоюється меншому, то може відбутися втрата точності.
int + float буде автоматично перетворено до float + float
float / int буде автоматично перетворено до float / float
double * float буде перетворено до double * double
int = double double буде перетворено до int з втратою дробової частини
float = int int буде перетворено до float