Математика в C++: библиотека cmath и ловушки чисел
Получай правильный ответ, а не тихо неверный
Главная идея: C++ любит математику, но у чисел строгие правила. Библиотека
<cmath> даёт готовые инструменты, такие как sqrt и pow. В то же время несколько ловушек — например, деление целых чисел и крошечные ошибки округления — могут заставить программу тихо напечатать неверный ответ. Этот урок показывает и инструменты, и ловушки, чтобы твоя математика всегда была правильной.
К концу урока ты сможешь:
- использовать функции
<cmath>, такие какsqrt,pow,round,abs,ceilиfloor, - объяснить, почему
7 / 2даёт3, а не3.5, - правильно применять оператор остатка
%, - замечать ошибку округления чисел с плавающей точкой и переполнение целых,
- выбирать правильный числовой тип, чтобы ответы оставались верными.
1. Набор инструментов <cmath>
Ты уже знаешь операторы +, -, * и / из урока Операторы и выражения. Но как найти квадратный корень или возвести число в степень? C++ хранит такие действия в наборе инструментов под названием <cmath>. Ты открываешь этот набор, добавив одну строку в начало файла:
#include <cmath>
Как только он подключён, ты можешь вызывать эти удобные функции. Представь каждую как маленькую машину: ты подаёшь ей число, а она возвращает другое.
| Функция | Что делает | Пример | Результат |
|---|---|---|---|
sqrt(x) | квадратный корень | sqrt(9.0) | 3.0 |
pow(x, y) | x в степени y | pow(2.0, 3.0) | 8.0 |
abs(x) | модуль (убирает знак минус) | abs(-4) | 4 |
round(x) | округляет до ближайшего целого | round(2.7) | 3.0 |
ceil(x) | округляет ВВЕРХ до целого | ceil(2.1) | 3.0 |
floor(x) | округляет ВНИЗ до целого | floor(2.9) | 2.0 |
Вот они работают вместе в настоящей программе:
#include <iostream>
#include <cmath>
using namespace std;
int main() {
cout << sqrt(16.0) << endl; // 4
cout << pow(3.0, 2.0) << endl; // 9
cout << abs(-7) << endl; // 7
cout << round(4.6) << endl; // 5
return 0;
}
Большинство функций
<cmath> работают с числами double (десятичными) и возвращают double. Поэтому мы написали 16.0, а не просто 16.