Spec-Zone.ru › C++

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)
1-3) Вычисляет наименьшее целое значение, не меньшее, чем num. Библиотека предоставляет перегрузки std::ceil для всех типов с плавающей точкой без квалификаторов cv, как тип параметра.(с C++23)
A) Дополнительные перегрузки предоставляются для всех целочисленных типов, которые обрабатываются как double. (с C++11)

Параметры

num - значение с плавающей точкой или целое

Значение возврата

Если ошибок не произошло, возвращается наименьшее целое значение, не меньшее, чем num, то есть ⌈num⌉.

Значение возврата
math-ceil.svg
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/w/cpp/numeric/math/ceil

Spec-Zone.ru

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