frexp, frexpf, frexpl -
приводит
число с
плавающей
точкой к
виду
мантисса/степень
Math library (
libm,
-lm)
#include <math.h>
double frexp(double x, int *exp);
float frexpf(float x, int *exp);
long double frexpl(long double x, int *exp);
frexpf(),
frexpl():
_ISOC99_SOURCE || _POSIX_C_SOURCE >= 200112L
|| /* начиная с glibc 2.19: */ _DEFAULT_SOURCE
|| /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE
Эти
функции
используются
для
разделения
числа
x на
нормализованную
мантиссу и
степень,
которая
сохраняется
в
exp.
Эти
функции
возвращают
нормализованную
мантиссу.
Если
аргумент
x
не равен
нулю, то
нормализованная
мантисса
равна
x
степеням
двойки, а её
абсолютное
значение
всегда
находится
в
диапазоне
от 1/2
(включительно)
до 1 (не
включая), то
есть [0.5,1).
Если
значение
x
равно нулю,
то
нормализованная
мантисса
равна нулю,
и ноль
сохраняется
в
exp.
Если
значение
x
равно NaN, то
возвращается
NaN, а значение
*exp не
определено.
Если
x
равно плюс
или минус
бесконечность,
то будет
возвращена
плюс или
минус
бесконечность,
а значение
*exp не
определено.
Ошибки не
возникают.
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
frexp(), frexpf(), frexpl() |
Безвредность
в нитях |
MT-Safe |
C99, POSIX.1-2001, POSIX.1-2008.
Вариант,
возвращающий
значение
типа
double,
также
соответствует
SVr4, 4.3BSD.
Нижеследующая
программа
выдает
такие
результаты:
$ ./a.out 2560
frexp(2560, &e) = 0.625: 0.625 * 2^12 = 2560
$ ./a.out -4
frexp(-4, &e) = -0.5: -0.5 * 2^3 = -4
#include <float.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[])
{
double x, r;
int exp;
x = strtod(argv[1], NULL);
r = frexp(x, &exp);
printf("frexp(%g, &e) = %g: %g * %d^%d = %g\n",
x, r, r, FLT_RADIX, exp, x);
exit(EXIT_SUCCESS);
}
ldexp(3),
modf(3)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]