2016-09-16 9 views
0

Только что скомпилировав программу с использованием MPFR C++ (в первый раз), мне нужно распечатать несколько довольно больших чисел, но они появляются только как технические обозначения, а не целые числа. Из того, что я читал, библиотека не оптимизирована для (произвольных) целых чисел, поэтому отлично использовать числа с плавающей запятой как целые числа, так как они не будут иметь никаких десятичных знаков. Я только начинающий на C++, поэтому не знаю, как я могу использовать все доступные инструменты, но есть ли способ распечатать (большие) числа с плавающей запятой, как если бы они были целыми числами? Например, вместо (скажем) 1.12276e+44, печать 112275575285571389562324404930670903477890625. Если я попробую std::cout.precision(44), я получаю 1.12275575285571389562324404930670903477890625e+44, что не выглядит лучше.MPFR C++ Печать чисел с плавающей запятой, таких как целые числа

+0

Вы пробовали [используя любой другой формат вывода с плавающей запятой] (http://en.cppreference.com/w/cpp/io/manip/fixed)? –

+0

Что произойдет, если вы добавите 'std :: fixed'? источник: http://en.cppreference.com/w/cpp/io/manip/fixed –

+0

@JoachimPileborg Нет, у меня его нет. Спасибо, что разместили ссылку. 'std :: fixed' похоже приближается к тому, что я хочу, что не печатает десятичные числа. Это единственный способ сделать это? –

ответ

3

MPFR C++ позволяет точную настройку формата вывода a la printf (если стандартных возможностей C++ недостаточно). Пример:

std::cout<<x.toString("%34.0RNf")

Пожалуйста, обратитесь к MPFR инструкции для спецификации формата в скобках. Также вы можете проверить этот вопрос: https://stackoverflow.com/a/9627660/479995

+0

Благодарим вас за ответ. Я не думаю, что есть способ работать с большими целыми числами, а не с плавающими точками? Моя потребность в генерации полиномов, и порядок может достигать 50, но я все еще думаю о том, следует ли мне это закрывать или позволить пользователям получать удовольствие ... –

+0

На самом деле MPFR не является библиотекой для больших целых чисел, и это не хорошо идея имитировать их с помощью типов с плавающей точкой. GMP/MPIR специально ориентированы на это (см. Тип mpz_t), для библиотек существует несколько оболочек C++. –

+0

Тип с плавающей точкой имеет фиксированное количество бит для хранения числа - так что действительно большое целое число будет округлено до этого количества бит. Нативная библиотека большого числа расширяет число хранения, чтобы точно сохранить номер. –