Spec-Zone.ru › C

trunc, truncf, truncl

Определено в заголовочном файле <math.h>
float       truncf( float arg );
(1) (начиная с C99)
double      trunc( double arg );
(2) (начиная с C99)
long double truncl( long double arg );
(3) (начиная с C99)
Определено в заголовочном файле <tgmath.h>
#define trunc( arg )
(4) (начиная с C99)
1-3) Вычисляет ближайшее целое число, модуль которого не больше модуля arg.
4) Обобщённый макрос типа: если arg имеет тип longdouble, вызывается truncl. Иначе, если arg имеет целочисленный тип или тип double, вызывается trunc. В противном случае вызывается truncf.

Параметры

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

Возвращаемое значение

Если ошибок не возникает, возвращается ближайшее целое число, модуль которого не больше модуля arg (иначе говоря, arg, округлённое к нулю).

Возвращаемое значение
Аргумент

Обработка ошибок

Об ошибках сообщается согласно требованиям math_errhandling.

Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559):

  • Текущий режим округления не влияет на результат.
  • Если arg равен ±∞, он возвращается без изменений.
  • Если arg равен ±0, он возвращается без изменений.
  • Если arg — NaN, возвращается NaN.

Примечания

При усечении конечного значения, не являющегося целым, может (но не обязательно) возникнуть исключение FE_INEXACT.

Наибольшие представимые значения с плавающей точкой являются точными целыми числами во всех стандартных форматах с плавающей точкой, поэтому эта функция сама по себе никогда не вызывает переполнения; однако результат может выходить за пределы любого целочисленного типа (включая intmax_t) при сохранении в целочисленную переменную.

Неявное преобразование из типа с плавающей точкой в целочисленный тип также округляет к нулю, но ограничено значениями, представимыми целевым типом.

Пример

#include <math.h>
#include <stdio.h>

int main(void)
{
    printf("trunc(+2.7) = %+.1f\n", trunc(+2.7));
    printf("trunc(-2.7) = %+.1f\n", trunc(-2.7));
    printf("trunc(-0.0) = %+.1f\n", trunc(-0.0));
    printf("trunc(-Inf) = %+f\n",   trunc(-INFINITY));
}

Возможный вывод:

trunc(+2.7) = +2.0
trunc(-2.7) = -2.0
trunc(-0.0) = -0.0
trunc(-Inf) = -inf

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2024):
    • 7.12.9.8 Функции trunc (с. TBD)
    • 7.25 Обобщённая математика для типов <tgmath.h> (с. TBD)
    • F.10.6.8 Функции trunc (с. TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.9.8 Функции trunc (с. TBD)
    • 7.25 Обобщённая математика для типов <tgmath.h> (с. TBD)
    • F.10.6.8 Функции trunc (с. TBD)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.9.8 Функции trunc (с. 253-254)
    • 7.25 Обобщённая математика для типов <tgmath.h> (с. 373-375)
    • F.10.6.8 Функции trunc (с. 528)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.9.8 Функции trunc (с. 234)
    • 7.22 Обобщённая математика для типов <tgmath.h> (с. 335-337)
    • F.9.6.8 Функции trunc (с. 464)

См. также

floorfloorffloorl
(C99)(C99)
вычисляет наибольшее целое число, не превосходящее заданное значение
(функция)
ceilceilfceill
(C99)(C99)
вычисляет наименьшее целое число, не меньшее заданного значения
(функция)
roundroundfroundllroundlroundflroundlllroundllroundfllroundl
(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)(C99)
округляет до ближайшего целого числа, а в случае ровно половинного значения — от нуля
(функция)
Документация по C++ для trunc

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/c/numeric/math/trunc

Spec-Zone.ru

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