ceil в C/C++: округление вверх
👋 Привет! В этой статье мы поговорим о функции ceil
. Эта функция позволяет нам округлить число вверх в C/C++. Сначала мы посмотрим как использовать эту функцию на примере, а потом попробуем реализовать ее сами. Также мы разберемся чем отличается ceil
от ceill
и ceilf
. В конце статьи вы найдете упражнения для закрепления материала.
Как округлить число вверх в C/C++
Для того, чтобы округлить число вверх в C/C++ мы можем воспользоваться встроенной функцией ceil
. Эта функция доступна нам после подключения файла <math.h>
. В C++ можно подключить <cmath>
. Вот как выглядит прототип этой функции:
double ceil (double x);
- Единственным аргументом функция принимает число, которое нужно округлить.
- Возвращает функция результат округления.
Давайте посмотрим на пример:
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout << "ceil(3) = " << ceil(3) << endl;
cout << "ceil(12.34) = " << ceil(12.34) << endl;
cout << "ceil(1.0000001) = " << ceil(1.0000001) << endl;
cout << "ceil(0) = " << ceil(0) << endl;
cout << "ceil(-0.25) = " << ceil(-0.25) << endl;
cout << "ceil(-2) = " << ceil(-2) << endl;
return 0;
}
Вывод программы:
ceil(3) = 3
ceil(12.34) = 13
ceil(1.0000001) = 2
ceil(0) = 0
ceil(-0.25) = -0
ceil(-2) = -2
Что будет выведено на экран?
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double a = -12.34;
cout << ceil(a) << endl;
return 0;
}
Как реализовать ceil самому
Давайте попробуем реализовать функцию ceil
сами:
#include <iostream>
using namespace std;
double my_ceil(double x) {
// Приведем число к целочисленному типу(это обрежет дробную часть)
int int_part = (int)x;
// Если число уже целое, возвращаем его
if (x == int_part) {
return int_part;
}
// Если число отрицательное, возвращаем его как целое число
// Так как отрицательное число при округлении вверх идет к ближайшему
// большему отрицательному числу (например, ceil(-2.3) = -2),
// это эквивалентно простому преобразованию к целому числу
else if (x < 0) {
return int_part;
}
// Если число положительное и не целое, добавляем 1 к целой части числа
else {
return int_part + 1;
}
}
int main() {
cout << "my_ceil(3) = " << my_ceil(3) << endl;
cout << "my_ceil(12.34) = " << my_ceil(12.34) << endl;
cout << "my_ceil(1.0000001) = " << my_ceil(1.0000001) << endl;
cout << "my_ceil(0) = " << my_ceil(0) << endl;
cout << "my_ceil(-0.25) = " << my_ceil(-0.25) << endl;
cout << "my_ceil(-2) = " << my_ceil(-2) << endl;
return 0;
}
Вывод программы:
my_ceil(3) = 3
my_ceil(12.34) = 13
my_ceil(1.0000001) = 2
my_ceil(0) = 0
my_ceil(-0.25) = 0
my_ceil(-2) = -2
Функции ceill и ceilf
Функции ceill
и ceilf
, как и ceil
, округляют переданное число вверх. Разница только в том, что они работают с вещественными числами long double
(ceill
) и float
(ceilf
). Давайте посмотрим на пример:
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout << "ceill(12.34) = " << ceill(12.34) << endl;
cout << "ceil (12.34) = " << ceil(12.34) << endl;
cout << "ceilf(12.34) = " << ceilf(12.34) << endl;
return 0;
}
Вывод:
ceill(12.34) = 13
ceil (12.34) = 13
ceilf(12.34) = 13
Как вы можете видеть, они возвращают одно и то же число, просто другого типа.
Упражнения
-
Применение
ceil
:- Напишите прог рамму на C++, которая запрашивает у пользователя вещественное число.
- Примените к нему функцию
ceil
и выводите результат. - Ваша программа должна также выводить исходное число пользователя.
-
Реализация своей версии
ceil
:- Используя предоставленный в статье пример, напишите свою версию функции
ceil
. Ваша функция должна быть названаmy_ceil
и принимать число типаdouble
. - Проверьте её работу, используя различные числа, и сравните результаты с встроенной функцией
ceil
.
- Используя предоставленный в статье пример, напишите свою версию функции
-
Сравнение
ceil
,ceill
иceilf
:- Напишите программу, которая демонстрирует различия между
ceil
,ceill
, иceilf
. - Ваша программа должна включать в себя вызовы всех трёх функций и вывод результатов их работы на экран.
- Напишите программу, которая демонстрирует различия между
Если хотите всегда быть в курсе последних новостей в мире программирования и IT, подписываетесь на мой Telegram-канал, где я делюсь свежими статьями, новостями и полезными советами. Буду рад видеть вас среди подписчиков!
Обсуждение