std::trunc, std::truncf, std::truncl
Определено в заголовочном файле <cmath> | ||
|---|---|---|
float trunc ( float num ); double trunc ( double num ); long double trunc ( long double num ); | (1) | (до C++23) |
constexpr /*floating-point-type*/
trunc ( /*floating-point-type*/ num );
| (начиная с C++23) | |
float truncf( float num ); | (2) |
(начиная с C++11) (constexpr начиная с C++23) |
long double truncl( long double num ); | (3) |
(начиная с C++11) (constexpr начиная с C++23) |
| Перегрузка SIMD (начиная с C++26) | ||
Определено в заголовочном файле <simd> | ||
template< /*math-floating-point*/ V >
constexpr /*deduced-simd-t*/<V>
trunc ( const V& v_num );
| (S) | (начиная с C++26) |
| Дополнительные перегрузки (начиная с C++11) | ||
Определено в заголовочном файле <cmath> | ||
template< class Integer > double trunc ( Integer num ); | (A) | (constexpr начиная с C++23) |
num по модулю. Библиотека предоставляет перегрузки std::trunc для всех типов с плавающей точкой без cv-квалификаторов в качестве типа параметра.(начиная с C++23)
S) Перегрузка SIMD выполняет поэлементное std::trunc над 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) при сохранении в целочисленной переменной.
Неявное преобразование из типов с плавающей точкой в целочисленные также округляет к нулю, но ограничено значениями, представимыми целевым типом.
Дополнительные перегрузки не обязательно должны быть предоставлены в точности в виде (A). Достаточно, чтобы они обеспечивали для аргумента num целочисленного типа такое же поведение std::trunc(num), как у std::trunc(static_cast<double>(num)).
Пример
#include <cmath>
#include <initializer_list>
#include <iostream>
int main()
{
const auto data = std::initializer_list<double>
{
+2.7, -2.9, +0.7, -0.9, +0.0, 0.0, -INFINITY, +INFINITY, -NAN, +NAN
};
std::cout << std::showpos;
for (double const x : data)
std::cout << "trunc(" << x << ") == " << std::trunc(x) << '\n';
}
Возможный вывод:
trunc(+2.7) == +2 trunc(-2.9) == -2 trunc(+0.7) == +0 trunc(-0.9) == -0 trunc(+0) == +0 trunc(+0) == +0 trunc(-inf) == -inf trunc(+inf) == +inf trunc(-nan) == -nan trunc(+nan) == +nan
См. также
|
(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 для trunc |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/math/trunc