- C标准库
- C库 - 首页
- C库 - <assert.h>
- C库 - <complex.h>
- C库 - <ctype.h>
- C库 - <errno.h>
- C库 - <fenv.h>
- C库 - <float.h>
- C库 - <inttypes.h>
- C库 - <iso646.h>
- C库 - <limits.h>
- C库 - <locale.h>
- C库 - <math.h>
- C库 - <setjmp.h>
- C库 - <signal.h>
- C库 - <stdalign.h>
- C库 - <stdarg.h>
- C库 - <stdbool.h>
- C库 - <stddef.h>
- C库 - <stdio.h>
- C库 - <stdlib.h>
- C库 - <string.h>
- C库 - <tgmath.h>
- C库 - <time.h>
- C库 - <wctype.h>
C库 - frexp() 函数
C库函数double frexp(double x, int *exponent)返回尾数,指向**exponent**的整数是指数。结果值为**x = 尾数 * 2 ^ 指数**。
尾数是对数中小数点后的部分。
语法
以下是C库函数frexp()的语法:
double frexp(double x, int *exponent)
参数
此函数接受两个参数:
x - 这是要计算的浮点值。
exponent - 这是指向存储指数值的**int**对象的指针。
返回值
此函数返回规范化分数。如果参数x不为零,则规范化分数为**x**乘以2的幂,其绝对值始终在1/2(包含)到1(不包含)的范围内。如果**x**为零,则规范化分数为零,并且零存储在exp中。
示例1
以下是演示frexp()函数用法的C库代码。
#include <stdio.h> #include <math.h> int main () { double x = 1024, fraction; int e; fraction = frexp(x, &e); printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e); return(0); }
输出
以上代码产生以下结果:
x = 1024.00 = 0.50 * 2^11
示例2
在此程序中,我们使用frexp()从双精度数中提取尾数和指数。
#include <stdio.h> #include <math.h> int main() { double num = 1234.5678; int exponent; // Extract mantissa and exponent double mantissa = frexp(num, &exponent); printf("Number: %.4lf\n", num); printf("Mantissa: %.4lf\n", mantissa); printf("Exponent: %d\n", exponent); return 0; }
输出
执行以上代码后,我们得到以下结果:
Number: 1234.5678 Mantissa: 0.6028 Exponent: 11
示例3
该程序定义自定义函数my_exp(),使用尾数和指数计算e^x的近似值。
#include <stdio.h> #include <math.h> double my_exp(double x) { int exponent; double mantissa = frexp(x, &exponent); return ldexp(mantissa, exponent); } int main() { double x = 2.0; double approx_exp = my_exp(x); printf("Approximation of e^%.2lf = %.6lf\n", x, approx_exp); return 0; }
输出
执行代码后,我们得到以下结果:
Approximation of e^2.00 = 2.000000
广告