nextafter, nextafterf, nextafterl – поиск ближайшего допустимого значения.
Синтаксис:
#include < math.h >
double nextafter (double x, double y);
float nextafterf (float x, float y);
long double nextafterl (long double x, long double y);
Аргументы:
x – переменная, относительно которой осуществляется поиск.
y – переменная, определяющая направление поиска.
Возвращаемое значение:
Наименьшее допустимое число большее аргумента x, если x меньше y.
Наибольшее допустимое число меньшее аргумента y, если x больше y.
Ближайшее допустимое число, если x равен y.
nan – если один из аргументов или оба аргумента не числа (NAN).
HUGE_VAL, если аргумент x - бесконечность. HUGE_VAL возвращает функция nextafter. Функции nextafterf и nextafterl возвращают HUGE_VALF и HUGE_VALL соответственно.
-HUGE_VAL, если аргумент x – минус бесконечность. -HUGE_VAL возвращает функция nextafter. Функции nextafterf и nextafterl возвращают -HUGE_VALF и -HUGE_VALL соответственно.
Описание:
Числа с плавающее точкой определенные типами float, double и long double имеют ограниченную точность зависящую от типа числа, а следовательно и минимально допустимый дискрет изменения.
Функции nextafter, nextafterf, nextafterl определяют ближайшие к аргументу x допустимые значения отличные от аргумента x. Направление поиска определяется аргументом y. То есть, если y больше x, то будет искаться допустимое значение минимально большее аргумента x. Если y меньше x, то будет искаться максимальное допустимое значение меньшее аргумента x.
Отличие от функций nexttoward, nexttowardf, nexttowardl заключается в возвращаемом значении при равенстве аргументов x и y. Так у функций nextafter, nextafterf, nextafterl будет возвращено ближайшее к аргументу x допустимое число, а у функций nexttoward, nexttowardf, nexttowardl из двух ближайших к аргументу x чисел будет возвращено наиболее удаленное.
Между собой функции отличаются типом аргументов и возвращаемых значений, а соответственно и шагом минимального дискрета. Так аргументы и возвращаемое значение функции nextafter являются числами с плавающей точкой двойной точности (тип double, точность не менее десяти значащих десятичных цифр, разрядность - 64).
Аргументы и возвращаемое значение функции nextafterf являются числами с плавающей точкой (тип float, точность не менее шести значащих десятичных цифр, разрядность - 32).
Аргументы и возвращаемое значение функции nextafterl являются числами с плавающей точкой повышенной точности (тип long double, точность не менее десяти значащих десятичных цифр, разрядность - 80).
Пример:
В примере ищется значение минимально большее десяти для различных типов переменных с плавающей точкой с помощью функций nextafter, nextafterf, nextafterl и результат выводится на консоль.
#include < stdio.h > //Для printf
#include < math.h > //Для nextafter, nextafterf, nextafterl
int main (void)
{
printf (“Аргументы: 10 и 12”);
//Ищем минимально большее 10 значение для типа float
printf (“nextafterf: %.20f\n", nextafterf (10,12) );
//Ищем минимально большее 10 значение для типа double
printf (“nextafter : %.20f\n", nextafter (10,12) );
//Ищем минимально большее 10 значение для типа long double
printf (“nextafterl: %.20Lf\n", nextafterl (10,12) );
return 0;
}
| |
Результат:
Аргументы: 10 и 12
nextafterf: 10.00000095367431640625
nextafter : 10.00000000000000177636
nextafterl: 10.00000000000000000087
|
Смотри так же:
nextafter, nextafterf, nextafterl
nexttoward, nexttowardf, nexttowardl
|