获取浮点数的尾数和指数

获取浮点数的尾数和指数#

参考:frexp

float frexp(
   float x,
   int * expptr
);  // C++ only
long double frexp(
   long double x,
   int * expptr
);  // C++ only

参数:

  • x:浮点值。

  • expptr:指向存储的整数指数的指针。

frexp() 返回尾数。 如果 x0,则该函数将返回 0 表示尾数和指数。 NULL 如果是 expptr,则调用无效的参数处理程序,如参数验证中所述。 如果允许执行继续,则该函数将 errno 设置为 EINVAL 并返回 0

备注

frexp 函数将浮点值(x)分解为尾数(mantissa m)和指数(exponent,n),使绝对值 m 大于或等于 0.5 且小于 1.0,并且 \(x = m * 2^n\)。整数指数 n 存储在由 expptr 指向的位置。

#include <math.h>
#include <iostream>

double x, y;
int n;
x = 16.4;
y = frexp(x, &n);
std::cout << "std::frexp(x, &n) => " 
         << x << " = " << y << " * "
         << "(1 << " << n << ")";
std::frexp(x, &n) => 16.4 = 0.5125 * (1 << 5)
double x = 2.302585093;
double y;

y = exp(x);
double sigmoid(double x) {
    return 1/(1+exp(-x));
}
sigmoid(1)
0.73105858
sigmoid(0)
0.50000000
1/(0.5)
2.0000000
1/2
0
0.5 * 100
50.000000