rint, rintf, rintl – округление до ближайшего целого
Синтаксис:
#include < math.h >
double rint (double x);
float rintf (float x);
long double rintl (long double x);
Аргументы:
x – число, которое необходимо округлить.
Возвращаемое значение:
Округленный аргумент.
Описание:
Функции округляют аргумент x до ближайшего целого числа используя установленные в системы правила округления (смотри функции fgetround(), fsetround() ). работа этих функций похожа на работу функций nearbyint. Но в функциях rint, rintf, rintl если полученный результат отличается от аргумента, то будет сгенерирована исключительная ситуация (exception) при выполнении операции с плавающей точкой: inexact (неточный результат).
Причем в функции rintf аргумент и возвращаемое значение задаются типом float, точность которого не меньше шести значащих десятичных цифр, а разрядность – 32.
В функции rint аргумент и возвращаемое значение задаются типом double, точность которого не меньше десяти значащих десятичных цифр, а разрядность – 64.
В функции rintl аргумент и возвращаемое значение задаются типом long double, точность которого не меньше десяти значащих десятичных цифр, а разрядность – 80.
Пример:
В примере число 7.2 округляется с помощью функций rint и nearbyint, а затем округляется число 7.0 с помощью функций rint. После каждого округления проверяется наличие исключительной ситуации (exception) inexact (неточный результат). Результаты работы функций округления и наличие/отсутствие исключительных ситуаций выводятся на консоль.
#include < stdio.h > //Для printf
#include < math.h > //Для rint, nearbyint
#include < fenv.h > //Для feclearexcept, fetestexcept
int main (void)
{
//Переменная в которую будет записываться признак наличия
//исключительной ситуации
int x=0;
//==============================================
//Сброс признаков произошедших исключительных ситуаций
feclearexcept (FE_ALL_EXCEPT);
//Округление числа c помощью nearbyint и вывод результата на консоль
printf (“nearbyint: аргумент 7.2, округление: %.1f\n“,nearbyint(7.2));
//Проверяем, произошла ли исключительная ситуация
x=fetestexcept (FE_INEXACT);
//Выводим отчет об исключительной ситуации на консоль
if (x==0) {puts (“ exception inexact отсутствует”);}
else {puts (“ exception inexact зафиксирован”);}
//==============================================
//Сброс признаков произошедших исключительных ситуаций
feclearexcept (FE_ALL_EXCEPT);
//Округление числа c помощью rint и вывод результата на консоль
printf (“\nrint: аргумент 7.2, округление: %.1f\n“,rint(7.2));
//Проверяем, произошла ли исключительная ситуация
x=fetestexcept (FE_INEXACT);
//Выводим отчет об исключительной ситуации на консоль
if (x==0) {puts (“ exception inexact отсутствует”);}
else {puts (“ exception inexact зафиксирован”);}
//==============================================
//Сброс признаков произошедших исключительных ситуаций
feclearexcept (FE_ALL_EXCEPT);
//Округление числа c помощью rint и вывод результата на консоль
printf (“rint: аргумент 7.0, округление: %.1f\n“,rint(7.0));
//Проверяем, произошла ли исключительная ситуация
x=fetestexcept (FE_INEXACT);
//Выводим отчет об исключительной ситуации на консоль
if (x==0) {puts (“ exception inexact отсутствует”);}
else {puts (“ exception inexact зафиксирован”);}
return 0;
}
| |
Результат:
nearbyint: аргумент 7.2, округление: 7.0
      exception inexact отсутствует
rint: аргумент 7.2, округление: 7.0
      exception inexact зафиксирован
rint: аргумент 7.0, округление: 7.0
      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
|