Кажется, что вы ищете mpf_class::get_str()
, который разбит значение с плавающей запятой 1.234
на строку "1234"
и показатель степени 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';
}
Это печатает
~ $ ./test
significand = 1125 exponent = -3