Вычислить следующее представимое число двойной точности с плавающей точкой
#include <math.h>double nextafter( double x,double y);float nextafterf( float x,float 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) |
![]() | В случае возникновения ошибки, эти функции возвращают 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 математической библиотеки