我需要将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);
}
Run Code Online (Sandbox Code Playgroud)
我的编译器是:gcc(Ubuntu/Linaro 4.6.4-6ubuntu2)4.6.4
基本对数将有所帮助.这个想法是用来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));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3387 次 |
| 最近记录: |