📜  C++ frexp()

📅  最后修改于: 2020-09-25 07:41:52             🧑  作者: Mango

C++中的frexp() 函数将浮点数分解成其二进制有效位数。

二进制有效位数是一个浮点,其绝对值(尾数)在区间[0.5,1)中,整数指数为2。

该函数在头文件中定义。

数学上

x = Binary significand * 2exponent

其中,指数存储在exp所指向的位置,而二进制有效位数是frexp()返回的值。

frexp()原型[从C++ 11标准开始]

double frexp (double x, int* exp);
float frexp (float x, int* exp);
long double frexp (long double x, int* exp);
double frexp (T x, int* exp); // For integral type

frexp() 函数接受两个参数,并返回doublefloatlong double类型的二进制有效值。

frexp()参数

frexp()返回值

frexp() 函数返回二进制有效数字,其绝对值位于间隔[0.5,1)中。如果x为零,则有效数和指数均为零。

frexp() return values
Parameter (x) Binary Significand Exponent
0 0 0
x >= 1 Positive Positive
x <= -1 Negative Positive
-1 < x < 0 Negative Negative
0 < x < 1 Positive Negative

示例1:frexp() 函数如何在C++中工作?

#include 
#include 

using namespace std;

int main ()
{
    double x = 6.81, significand;
    int *exp;
    significand = frexp(x , exp);
    cout << x << " = " << significand << " * 2^" << *exp << endl;

    return 0;
}

运行该程序时,输出为:

6.81 = 0.85125 * 2^3

示例2:带有整数类型的frexp() 函数

#include 
#include 

using namespace std;

int main ()
{
    double significand;
    int *exp, x = 25;
    significand = frexp (x , exp);
    cout << x << " = " << significand << " * 2^" << *exp << endl;
    return 0;
}

运行该程序时,输出为:

25 = 0.78125 * 2^5