std::ceil, std::ceilf, std::ceill
Определено в заголовочном файле <cmath> | ||
|---|---|---|
float ceil ( float num ); double ceil ( double num ); long double ceil ( long double num ); | (1) | (до C++23) |
constexpr /*floating-point-type*/
ceil ( /*floating-point-type*/ num );
| (начиная с C++23) | |
float ceilf( float num ); | (2) |
(начиная с C++11) (constexpr начиная с C++23) |
long double ceill( long double num ); | (3) |
(начиная с C++11) (constexpr начиная с C++23) |
| Перегрузка SIMD (начиная с C++26) | ||
Определено в заголовочном файле <simd> | ||
template< /*math-floating-point*/ V >
constexpr /*deduced-simd-t*/<V>
ceil ( const V& v_num );
| (S) | (начиная с C++26) |
| Дополнительные перегрузки (начиная с C++11) | ||
Определено в заголовочном файле <cmath> | ||
template< class Integer > double ceil ( Integer num ); | (A) | (constexpr начиная с C++23) |
num. Библиотека предоставляет перегрузки std::ceil для всех типов с плавающей точкой без cv-квалификаторов в качестве типа параметра.(начиная с C++23)
S) Перегрузка SIMD выполняет поэлементное std::ceil над v_num. (Определения см. в разделах math-floating-point и deduced-simd-t.) | (начиная с C++26) |
| A) Предоставляются дополнительные перегрузки для всех целочисленных типов, которые рассматриваются как double. | (начиная с C++11) |
Параметры
| num | - | значение с плавающей точкой или целочисленное значение |
Возвращаемое значение
Если ошибок не возникает, возвращается наименьшее целое значение, не меньшее num, то есть ⌈num⌉.
Обработка ошибок
Об ошибках сообщается согласно math_errhandling.
Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559),
- Текущий режим округления не влияет на результат.
- Если
numравно ±∞, оно возвращается без изменений. - Если
numравно ±0, оно возвращается без изменений. - Если
numявляется NaN, возвращается NaN.
Примечания
При округлении конечного нецелого значения может быть возбуждено исключение FE_INEXACT (но это не обязательно).
Наибольшие представимые значения с плавающей точкой являются точными целыми числами во всех стандартных форматах с плавающей точкой, поэтому эта функция сама по себе никогда не приводит к переполнению; однако при сохранении результата в целочисленную переменную может произойти переполнение любого целочисленного типа (включая std::intmax_t). Именно поэтому тип возвращаемого значения является типом с плавающей точкой, а не целочисленным типом.
Эта функция (с аргументом типа double) ведёт себя так, как если бы она была реализована следующим кодом (за исключением того, что FE_INEXACT может не возбуждаться):
#include <cfenv>
#include <cmath>
#pragma STDC FENV_ACCESS ON
double ceil(double x)
{
int save_round = std::fegetround();
std::fesetround(FE_UPWARD);
double result = std::rint(x); // or std::nearbyint
std::fesetround(save_round);
return result;
}
Дополнительные перегрузки не обязательно должны быть предоставлены в точности в виде (A). Достаточно, чтобы для аргумента num целочисленного типа std::ceil(num) действовало так же, как std::ceil(static_cast<double>(num)).
Пример
#include <cmath>
#include <iostream>
int main()
{
std::cout << std::fixed
<< "ceil(+2.4) = " << std::ceil(+2.4) << '\n'
<< "ceil(-2.4) = " << std::ceil(-2.4) << '\n'
<< "ceil(-0.0) = " << std::ceil(-0.0) << '\n'
<< "ceil(-Inf) = " << std::ceil(-INFINITY) << '\n';
}
Вывод:
ceil(+2.4) = 3.000000 ceil(-2.4) = -2.000000 ceil(-0.0) = -0.000000 ceil(-Inf) = -inf
См. также
|
(C++11)(C++11) | ближайшее целое число, не превосходящее заданное значение (функция) |
|
(C++11)(C++11)(C++11) | ближайшее целое число, модуль которого не превышает модуль заданного значения (функция) |
|
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | ближайшее целое число; в случае ровно половинного значения округление выполняется от нуля (функция) |
|
(C++11)(C++11)(C++11) | ближайшее целое число с использованием текущего режима округления (функция) |
|
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) | ближайшее целое число с использованием текущего режима округления; вызывает исключение, если результат отличается (функция) |
Документация по C для ceil |
|
Внешние ссылки
| Быстрое округление вверх при целочисленном делении — StackOverflow |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/ceil