找到基数为10的指数和尾数

时间:2015-04-11 20:55:17

标签: c++

我需要将double类型的数值分成:exponent和mantissa。我发现我可以使用frexp()中的math.h函数执行此操作。但是,此函数假定基数为2。

我是否可以通过某种方式找到指向基数10的指数和尾数 - 这样返回的尾数和指数都是整数类型。

#include <cstdio>
#include <cmath>

int main()
{
   int e;
   const double x = 1024;
   const double fraction = frexp(x, &e);
   std::printf("x = %.2lf = %.2lf * 2^%d\n", x, fraction, e);
}

我的编译器是:gcc(Ubuntu / Linaro 4.6.4-6ubuntu2)4.6.4

1 个答案:

答案 0 :(得分:6)

基本对数会有所帮助。我的想法是使用std::log10得到指数,然后将原始数除以10 ^ exp得到尾数。

double frexp10(double arg, int * exp)
{
   *exp = (arg == 0) ? 0 : 1 + (int)std::floor(std::log10(std::fabs(arg) ) );
   return arg * std::pow(10 , -(*exp));    
}