Spec-Zone.ru › C++

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)
1-3) Вычисляет ближайшее целое число, не превосходящее 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, округлённое к нулю).

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

См. также

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

Spec-Zone.ru

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