Функция frexp
Функция frexp раскладывает число с плавающей точкой
на мантиссу и экспоненту. В первый параметр мы передаем
исходное число, во второй - указатель на целочисленную
переменную, в которую будет записана экспонента. Функция
возвращает мантиссу - число в диапазоне от 0.5
до 1.0 (не включая границы). Исходное число
при этом представляется в виде: мантисса * 2экспонента.
Синтаксис
#include <cmath>
double frexp(double x, int* exp);
float frexp(float x, int* exp);
long double frexp(long double x, int* exp);
Пример
Давайте разложим число 8.0 на мантиссу и экспоненту:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x = 8.0;
int exp;
double mantissa = frexp(x, &exp);
cout << "mantissa = " << mantissa << endl;
cout << "exp = " << exp << endl;
return 0;
}
Результат выполнения кода:
"mantissa = 0.5"
"exp = 4"
Пример
Давайте разложим дробное число 0.75 на мантиссу
и экспоненту:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x = 0.75;
int exp;
double mantissa = frexp(x, &exp);
cout << "mantissa = " << mantissa << endl;
cout << "exp = " << exp << endl;
return 0;
}
Результат выполнения кода:
"mantissa = 0.75"
"exp = 0"
Пример
Давайте проверим обратное преобразование - соберем исходное число из мантиссы и экспоненты:
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
double x = 20.0;
int exp;
double mantissa = frexp(x, &exp);
double res = mantissa * pow(2, exp);
cout << "mantissa = " << mantissa << endl;
cout << "exp = " << exp << endl;
cout << "res = " << res << endl;
return 0;
}
Результат выполнения кода:
"mantissa = 0.625"
"exp = 5"
"res = 20"