Только что успешно скомпилировав программу с использованием MPFR C++ (первый раз), мне нужно распечатать несколько довольно больших чисел, но они получаются только в виде инженерных обозначений, а не целых чисел. Из того, что я прочитал, библиотека не оптимизирована для (произвольных) целых чисел, поэтому можно использовать числа с плавающей запятой как целые числа, поскольку в них не будет десятичных знаков. Я только новичок в C ++, поэтому я не знаю, как пройти через все доступные инструменты, но есть ли способ распечатать (большие) числа с плавающей запятой, как если бы они были целыми числами? Например, вместо (скажем) 1.12276e+44
напечатайте 112275575285571389562324404930670903477890625
. Если я попробую std::cout.precision(44)
, я получу 1.12275575285571389562324404930670903477890625e+44
, что выглядит ничуть не лучше.
MPFR C++ Печать чисел с плавающей запятой, таких как целые числа
Ответы (1)
MPFR C++ позволяет точно настроить формат вывода в стиле printf
(если стандартных возможностей C++ недостаточно). Пример:
std::cout<<x.toString("%34.0RNf")
Пожалуйста, обратитесь к руководству MPFR для спецификации формата в скобках. Также вы можете проверить этот вопрос: https://stackoverflow.com/a/9627660/479995
person
Pavel Holoborodko
schedule
16.09.2016
Спасибо за ответ. Я не думаю, что есть способ работать с большими целыми числами, а не с плавающей запятой? Мне нужно генерировать полиномы, и порядок может достигать 50, но я все еще думаю, следует ли мне ограничить его или позволить пользователям повеселиться...
- person a concerned citizen; 16.09.2016
На самом деле MPFR не является библиотекой для больших целых чисел, и не стоит имитировать их с помощью типов с плавающей запятой. GMP/MPIR специально ориентированы на это (см. тип mpz_t), для библиотек существуют некоторые оболочки C++.
- person Pavel Holoborodko; 16.09.2016
Тип с плавающей запятой имеет фиксированное количество битов для хранения числа, поэтому действительно большое целое число будет округлено до этого количества бит. Встроенная библиотека big-int увеличивает числовую память для точного хранения чисел.
- person Pavel Holoborodko; 16.09.2016
Первым был предложен GMP, но в нем не было даже sin/cos, затем был предложен MPFR, но он был слишком неуклюжим и запутанным, пока я не увидел обертки. Дело в том, что мне также нужно выяснить корни этих многочленов, поэтому, если я найду способ использовать настоящие целые числа, я думаю, что следующей стеной, которую я увижу, будет то, как использовать целое число в качестве аргумента с плавающей запятой в корне. функция нахождения. Использование чисел с плавающей запятой вместо целых, кажется, уже вызывает у меня головную боль, поскольку я вижу десятичные дроби там, где их быть не должно, но это может быть моя генерация полиномов.
- person a concerned citizen; 16.09.2016
std::fixed
? источник: en.cppreference.com/w/cpp/io/manip/fixed< /а> - person Richard Critten   schedule 16.09.2016std::fixed
, похоже, приближается к тому, что я хочу, а не к печати десятичных знаков. Это единственный способ сделать это? - person a concerned citizen   schedule 16.09.2016