如何在C ++中使用gpmlib提取基数10尾数和指数

时间:2011-06-08 17:33:20

标签: c++ gmp

我需要使用gpmlib在C ++中提取double的有效数和指数 例如:双倍a = 1.234;
我想提取1234作为有效数,3提取为指数,使得a = 1234e-3。我听说gpmlib支持这种类型的功能。我不知道如何使用这个库。

请使用此库分享一些示例代码。

1 个答案:

答案 0 :(得分:1)

您似乎正在寻找mpf_class::get_str(),它会将浮点值1.234分解为字符串"1234"和指数1,因为{ {1}}

您需要从该指数中减去字符串的大小,以满足您的要求。

1.234 == 0.1234 * 10^1

打印

#include <iostream>
#include <string>
#include <gmpxx.h>
int main()
{
    double a = 1.125; // 1.234 cannot be stored in a double exactly, try "1.234"
    mpf_class f(a);
    mp_exp_t exp;
    std::string significand = f.get_str(exp);
    std::cout << "significand = " << significand
              << " exponent = " << exp-(int)significand.size() << '\n';

}