2016-09-16 4 views
0

Nachdem ich gerade ein Programm mit MPFR C++ (1. Mal) kompiliert habe, muss ich einige ziemlich große Zahlen ausdrucken, aber sie kommen nur als technische Notationen anstelle der ganzen Zahlen heraus. Von dem, was ich lese, ist die Bibliothek nicht für (beliebige) Ganzzahlen optimiert, also ist es in Ordnung, Gleitkommazahlen als Ganzzahlen zu verwenden, da sie keine Dezimalzahlen haben. Ich bin nur ein Anfänger in C++, also kenne ich mich nicht mit allen verfügbaren Werkzeugen aus, aber gibt es eine Möglichkeit, die (großen) Fließkommazahlen so auszugeben, als wären sie ganze Zahlen? Als Beispiel, anstelle von (sagen wir) 1.12276e+44, drucken Sie 112275575285571389562324404930670903477890625. Wenn ich std::cout.precision(44) versuche, bekomme ich 1.12275575285571389562324404930670903477890625e+44, die nicht besser aussieht.MPFR C++ Gleitkommazahlen wie Ganzzahlen drucken

+0

Haben Sie versucht [mit einem der anderen Fließkomma-Ausgabeformate] (http://en.cppreference.com/w/cpp/io/manip/fixed)? –

+0

Was passiert, wenn Sie 'std :: fixed' hinzufügen? Quelle: http://en.cppreference.com/w/cpp/io/manip/fixed –

+0

@ JoachimPileborg Nein, habe ich nicht. Danke für das Posten des Links. 'std :: fixed 'scheint nahe an das zu kommen, was ich will, und die Dezimalstellen werden nicht gedruckt. Ist das der einzige Weg? –

Antwort

3

MPFR C++ ermöglicht die präzise Einstellung des Ausgabeformats a la printf (wenn die Standardfunktionen von C++ nicht ausreichen). Beispiel:

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

Bitte beachten Sie MPFR Handbuch für Formatangabe in Klammern. Sie könnten auch diese Frage überprüfen: https://stackoverflow.com/a/9627660/479995

+0

Vielen Dank für die Antwort. Ich nehme nicht an, dass es eine Möglichkeit gibt, mit großen Ganzzahlen zu arbeiten, anstatt mit Fließkommazahlen. Mein Bedarf besteht darin, Polynome zu erzeugen, und die Reihenfolge kann bis zu 50 betragen, aber ich überlege noch, ob ich das machen soll oder ob die Benutzer Spaß haben ... –

+0

Eigentlich ist MPFR nicht die Bibliothek für große Ganzzahlen und es ist nicht gut Idee, sie mit Fließkommatypen zu simulieren. GMP/MPIR sind speziell darauf konzentriert (siehe mpz_t Typ), es gibt einige C++ Wrapper für die Bibliotheken. –

+0

Der Fließkommatyp hat eine feste Anzahl von Bits, um die Nummer zu speichern - so wird eine wirklich große ganze Zahl auf diese Anzahl von Bits gerundet. Die native Big-Int-Bibliothek vergrößert den Nummernspeicher, um die Anzahl genau zu halten. –

Verwandte Themen