frexp, frexpf, frexpl – разложение числа с плавающей точкой на мантиссу и порядок.
Синтаксис:
#include < math.h >
double frexp (double x, int *p);
float frexpf (float x, int *p);
long double frexpl (long double x, int *p);
Аргументы:
x – число с плавающей точкой, которое необходимо разложить на мантиссу и экспоненту.
p – указатель на переменную, в которую будет помещен порядок числа x.
Возвращаемое значение:
Мантисса числа x, если работа функции завершилась успешно.
nan, если аргумент x nan, при этом значение переменной указанной аргументом p будет неопределенно.
inf, если аргумент x , бесконечность, при этом значение переменной указанной аргументом p будет неопределенно.
-inf, если аргумент x, минус бесконечность, при этом значение переменной указанной аргументом p будет неопределенно.
Описание:
Функции frexp, frexpf, frexpl раскладывают число с плавающей точкой на мантиссу и экспоненту. При этом значение мантиссы лежит в пределе от 0.5 до 1, включая 0.5, или равно нулю. А экспонента это целое число удовлетворяющее выражению: x = m*2p, где x – число с плавающей точкой, m – мантисса, p - порядок.
Функции frexp, frexpf, frexpl отличаются друг от друга точностью аргумента x и возвращаемого значения. Так аргумент x и возвращаемое значение функции frexp являются числами с плавающей точкой двойной точности (тип double, точность не менее десяти значащих десятичных цифр, разрядность - 64).
Аргумент x и возвращаемое значение функции frexpf являются числами с плавающей точкой (тип float, точность не менее шести значащих десятичных цифр, разрядность - 32).
Аргумент x и возвращаемое значение функции frexpl являются числами с плавающей точкой повышенной точности (тип long double, точность не менее десяти значащих десятичных цифр, разрядность - 80).
Пример:
В примере раскладывается число 274619.370654 на мантиссу и порядок с помощью функции frexp, frexpf, frexpl и результат выводится на консоль.
#include < stdio.h > //Для printf
#include < math.h > //Для frexp, frexpf, frexpl
int main (void)
{
float m1=0;
int p1 = 0;
double m2=0;
int p2=0;
long double m3=0;
int p3=0;
// Вывод числа разлагаемого на мантиссу и экспоненту
printf (“Исходное число: 274619.370654\n”);
//Разложение числа с помощью frexpf и вывод результата
m1=frexpf (274619.370654,&p1);
printf (“frexpf: мантисса %.10f, порядок %d\n”, m1, p1 );
//Разложение числа с помощью frexp и вывод результата
m2=frexp (274619.370654,&p2);
printf (“frexp : мантисса %.10f, порядок %d\n”, m2, p2 );
//Разложение числа с помощью frexpl и вывод результата
m3=frexpl (274619.370654,&p3);
printf (“frexpl: мантисса %.10Lf, порядок %d\n”, m3, p3 );
return 0;
}
| |
Результат:
Исходное число: 274619.370654
frexpf: мантисса 0.5237948895, порядок 19
frexp : мантисса 0.5237948812, порядок 19
frexpl: мантисса 0.5237948812, порядок 19
|
Смотри так же:
logb, logbf, logbl
ilogb, ilogbf, ilogbl
ldexp, ldexpf, ldexpl
frexp, frexpf, frexpl
scalb, scalbf, scalbl
scalbn, scalbnf, scalbnl
scalbln, scalblnf, scalblnl
|