std::ceil, std::ceilf, std::ceill
Определено в заголовке <cmath> | ||
|---|---|---|
| (1) | ||
float ceil ( float num ); double ceil ( double num ); long double ceil ( long double num ); | (до 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) |
| Дополнительные перегрузки (с C++11) | ||
Определено в заголовке <cmath> | ||
template< class Integer > double ceil ( Integer num ); | (A) | (constexpr с C++23) |
num. Библиотека предоставляет перегрузки std::ceil для всех типов с плавающей точкой без квалификаторов cv, как тип параметра.(с C++23)
| A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые обрабатываются как double. | (с C++11) |
Параметры
| num | - | значение с плавающей точкой или целое |
Значение возврата
Если ошибок не произошло, возвращается наименьшее целое значение, не меньшее, чем 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/w/cpp/numeric/math/ceil