Spec-Zone.ru › C++

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)
1-3) Вычисляет наименьшее целое значение, не меньшее 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⌉.

Возвращаемое значение
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

См. также

floorfloorffloorl
(C++11)(C++11)
ближайшее целое число, не превосходящее заданное значение
(функция)
trunctruncftruncl
(C++11)(C++11)(C++11)
ближайшее целое число, модуль которого не превышает модуль заданного значения
(функция)
roundroundfroundllroundlroundflroundlllroundllroundfllroundl
(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)
ближайшее целое число; в случае ровно половинного значения округление выполняется от нуля
(функция)
nearbyintnearbyintfnearbyintl
(C++11)(C++11)(C++11)
ближайшее целое число с использованием текущего режима округления
(функция)
rintrintfrintllrintlrintflrintlllrintllrintfllrintl
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API