Boost C ++, как вывести все цифры значений с плавающей запятой без знака степени? - PullRequest
0 голосов
/ 01 марта 2020
    #include <iostream>
    #include <boost/multiprecision/cpp_dec_float.hpp>
    #include <boost/multiprecision/cpp_int.hpp>
    using boost::multiprecision::number;
    using boost::multiprecision::cpp_dec_float;
    using boost::multiprecision::cpp_dec_float_50;
    using boost::numeric_cast;
    using std::cout;


    int main()
    {
        srand(time(NULL));


        std::cout << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
        cpp_dec_float_50 x = 0.0001;
        cpp_dec_float_50 y = x*x*x*x;
        std::cout << s << "\n";
    }

Итак, я следовал документации здесь: https://www.boost.org/doc/libs/1_63_0/libs/multiprecision/doc/html/boost_multiprecision/tut/floats/cpp_dec_float.html

Результат, который я ожидаю получить: 0,00000000000000000001 (20 нулей)

Но программа вывод: enter image description here

Для вопроса, я просто хочу удалить часть "e ^ -16". Как я могу это сделать? Кроме того, если кто-то другой может помочь мне вывести эти точные значения, это также будет очень полезно.

Спасибо.

1 Ответ

1 голос
/ 02 марта 2020

Вы создали экземпляр x с двоичным двойным значением, которое не представляется в виде десятичного числа. Вот как это исправить:

#include <iostream>
#include <boost/multiprecision/cpp_dec_float.hpp>

using boost::multiprecision::cpp_dec_float_50;

int main()
{   
    std::cout << std::setprecision(std::numeric_limits<cpp_dec_float_50>::digits10);
    cpp_dec_float_50 x{"0.0001"};
    cpp_dec_float_50 y = x*x*x*x;
    std::cout << std::fixed;
    std::cout << y << "\n";
}

Вывод:

0.00000000000000010000000000000000000000000000000000
...