nextafter(), nextafterf()

Вычислить следующее представимое число двойной точности с плавающей точкой

Прототип:

#include <math.h>
double nextafter( double x,
double y);
float nextafterf( float x,
float y );

Аргументы:

x
Число, после которого необходимо найти следующее представимое число.
y
Число, указывающее направление поиска.

Библиотека:

libm

Описание:

Функции nextafter() и nextafterf() вычисляют следующее представимое значение с плавающей точкой с двойной точностью после x в направлении y.

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

Следующее представимое значение с плавающей точкой после x в направлении y.

Если: nextafter() возвращает:
y < x Следующее представимое значение с плавающей точкой, со значением меньше чем y
y > x Следующее представимое значение с плавающей точкой, со значением больше чем y
x равен NAN NAN
y равен NAN NAN
x - конечное число ±HUGE_VAL, согласно знаку x (устанавливается errno)


Note: В случае возникновения ошибки, эти функции возвращают 0, который также может быть и достоверным математическим результатом. Если вам необходимо проверить, возникла ли ошибка, установите errno в 0, вызовите функцию, и затем снова проверьте errno. Эти функции не изменяют errno в случае отсутствия ошибок.

Примеры:

#include <stdio.h>
#include <errno.h>
#include <inttypes.h>
#include <math.h>
#include <fpstatus.h>
void dump_to_hex( double d )
{
printf( "0x%08x %08x \n", (uint32_t)(*((uint64_t *)&d) >> 32),
(uint32_t)(*((uint64_t *)&d)) );
}
int main( void )
{
double a, b, c;
a = 0 ;
b = nextafter( a, -1 );
c = nextafter( a, 1 );
printf( "Next possible value before %f is %f \n", a, b );
printf( "-->" ); dump_to_hex( a );
printf( "-->" ); dump_to_hex( b );
printf( "Next possible value after %f is %f \n", a, c );
printf( "-->" ); dump_to_hex( a );
printf( "-->" ); dump_to_hex( c );
return (0);
}

Код генерирует следующий вывод:

$ ./a.out Next possible value before 0.000000 is 0.000000 -->0x00000000 00000000 -->0x80000000 00000001 Next possible value after 0.000000 is 0.000000 -->0x00000000 00000000

Классификация:

ANSI, POSIX 1003.1

Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да




Предыдущий раздел: Описание API математической библиотеки