Как извлечь базовую 10 мантиссу и экспоненту с помощью gpmlib в C ++ - PullRequest
0 голосов
/ 08 июня 2011

Мне нужно извлечь значение и показатель двойного в C ++, используя gpmlib.
Пример: двойной а = 1,234;
Я хотел бы извлечь 1234 как значимое и 3 как показатель степени, так что a = 1234e-3. Я слышал, что gpmlib поддерживает функции этого типа. Я не уверен, как с этой библиотекой.

Пожалуйста, поделитесь примером кода с помощью этой библиотеки.

1 Ответ

1 голос
/ 08 июня 2011

Кажется, что вы ищете 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
...