lrint, lrintf, lrintl – округление до ближайшего целого
Синтаксис:
#include < math.h >
long int lrint (double x);
long int lrintf (float x);
long int lrintl (long double x);
Аргументы:
x – число, которое необходимо округлить.
Возвращаемое значение:
Если результат округления лежит в диапазоне значений возвращаемого числа (32 разрядного целого числа), то возвращается округленный аргумент.
Если значение аргумента слишком большое или NaN, или бесконечность, то возвращаемое значение будет не определено, а переменной errno будет присвоен код ошибки EDOM.
Описание:
Функции округляют аргумент x до ближайшего целого числа используя установленные в системы правила округления (смотри функции fgetround(), fsetround() ).
Если полученный результат отличается от аргумента, то будет сгенерирована исключительная ситуация (exception) при выполнении операции с плавающей точкой: inexact (неточный результат).
Будьте внимательны. В этих функциях аргумент описан числом с плавающей точкой, а возвращаемое значение целым 32-разрядным числом. Причем диапазон значений аргумента больше, чем возвращаемого значения.
В функции lrintf аргумент задается типом float, точность которого не меньше шести значащих десятичных цифр, а разрядность – 32.
В функции lrint аргумент задается типом double, точность которого не меньше десяти значащих десятичных цифр, а разрядность – 64.
В функции lrintl аргумент задается типом long double, точность которого не меньше десяти значащих десятичных цифр, а разрядность - 80.
Пример:
В примере число 78.92 округляется с помощью функций lrint, а затем проверяется наличие исключительной ситуации (exception) inexact (неточный результат). Результаты работы функций округления и наличие/отсутствие исключительных ситуаций выводятся на консоль.
#include < stdio.h > //Для printf
#include < math.h > //Для lrint
#include < fenv.h > //Для feclearexcept, fetestexcept
int main (void)
{
//Переменная в которую будет записываться признак наличия
//исключительной ситуации
int x=0;
//Сброс признаков произошедших исключительных ситуаций
feclearexcept (FE_ALL_EXCEPT);
//Округление числа c помощью lrint и вывод результата на консоль
printf (“lrint: аргумент 78.92, округление: %ld\n“, lrint(78.92) );
//Проверяем, произошла ли исключительная ситуация.
x=fetestexcept (FE_INEXACT);
//Выводим отчет об исключительной ситуации на консоль
if (x==0) {puts (“ exception inexact отсутствует”);}
else {puts (“ exception inexact зафиксирован”);}
return 0;
}
| |
Результат:
lrint: аргумент 78.92, округление: 79
exception inexact зафиксирован
|
Смотри так же:
ceil, ceilf, ceill
floor, floorf, floorl
round, roundf, roundl
lround, lroundf, lroundl
llround, llroundf, llroundl
trunc, truncf, truncl
modf, modff, modfl
nearbyint, nearbyintf, nearbyintl
rint, rintf, rintl
fegetround
fesetround
lrint, lrintf, lrintl
llrint, llrintf, llrintl
|