C 库 - ldexp() 函数



C 库的 ldexp() 函数,类型为 double,接受两个参数,例如 (x 和 exponent),它以x乘以2的exponent次幂的形式返回结果。

语法

以下是 C 库 ldexp() 函数的语法:

double ldexp(double x, int exponent)

参数

此函数接受两个参数:

  • x - 这是表示有效数的浮点值。

  • exponent - 这是指数的值。

返回值

此函数返回 x * 2 exp

示例 1

以下是一个基本的 C 库程序,用于说明 ldexp() 函数。

#include <stdio.h>
#include <math.h>

int main () {
   double x, ret;
   int n;

   x = 0.65;
   n = 3;
   ret = ldexp(x ,n);
   printf("%f * 2^%d = %f\n", x, n, ret);
   
   return(0);
}

输出

以上代码产生以下结果:

0.650000 * 2^3 = 5.200000

示例 2

下面的程序使用尾数和指数计算球体的体积。

#include <stdio.h>
#include <math.h>

double sphere_volume(double radius) {
   int expo;
   double mantissa = frexp(radius, &expo);

   // Calculate volume = (4/3) * π * (mantissa * 2^exponent)^3
   double vol = (4.0 / 3.0) * M_PI * pow(ldexp(mantissa, expo), 3);

   return vol;
}

int main() {
   double sphere_radius = 5.0; 
   double sphere_vol = sphere_volume(sphere_radius);

   printf("Volume of sphere with radius %.2lf = %.6lf\n", sphere_radius, sphere_vol);
   return 0;
}

输出

执行以上代码后,我们得到以下结果:

Volume of sphere with radius 5.00 = 523.598776

示例 3

要获得 2x 的近似值,可以使用两个函数:frexp() 返回尾数的值,而 ldexp() 用于返回结果。

#include <stdio.h>
#include <math.h>

double my_power_of_two(double x) {
   int expo;
   double mantis = frexp(x, &expo);
   return ldexp(mantis, expo);
}

int main() {
   double x = 3.96; 
   double approx_power_of_two = my_power_of_two(x);
   printf("Approximate 2^%.2lf = %.6lf\n", x, approx_power_of_two);
   return 0;
}

输出

执行以上代码后,我们得到以下结果:

Approximate 2^3.96 = 3.960000
广告