2009-06-18 5 views
5

Ich muss die genaue Länge einer zu druckenden Zeichenfolge von einem doppelten Wert angeben, aber ich möchte die Ausgabe nicht mehr als notwendig beschränken .C: Wie lange kann ein Doppel sein, wenn es durch printf gedruckt wird()

Welche maximale Länge hat ein 6-stelliges Präzisionsdoppel bei der Formatierung mit printf()?

Spezifisch, welchen Wert sollte ich X in printf("%X.6lg",doubleValue); geben, um sicherzustellen, dass kein Wert abgeschnitten wird?

Der Grund, warum ich über die Länge spezifisch sein muss, ist, dass ich einen MPI-abgeleiteten Datentyp definiere, der aus vielen Stringdarstellungen von Doppelwerten besteht und deren genaue Länge kennen muss, um Bereiche der Datei zwischen MPI zu teilen Prozesse.

Ich hoffe, das ist klar. Vielen Dank im Voraus für die Antwort.

+0

Ich bin mir nicht sicher, was Sie fragen - wollen Sie alle Ihre Werte 6 signifikante Ziffern lang, wie 0,123456, 1,23456, 12345,6, etc? Oder interessiert es Sie nur, dass der Bruchteil 6 signifikante Ziffern ist? Wie bei Bruchwerten weiß ich nicht, wie Sie eine Verkürzung vermeiden können, es sei denn, Ihre Werte sind "dyadisch" (d. H. Enden im Binärsystem) und sind kleiner oder gleich 63/64. –

Antwort

6

Verwendung printf("%.6g", doubleValue) oder printf("%.6Lg", doubleValue)

beachte, dass die führenden Ziffern (die „Breite“) in dem Genauigkeitsbezeichner macht von der Länge des integralen Teils des Wertes keine Forderungen Weglassen.

Beachten Sie auch, dass der Unterstrich "l" angibt, dass Ihr Wert ein langer Int-Wert ist. Das Großbuchstabe "L" gibt einen langen doppelten Wert an.

Beachten Sie auch, dass wenn Sie nicht möchten, dass dies möglicherweise in wissenschaftliche Notation geändert wird (wenn es eine kürzere Darstellung ist), würden Sie "f" anstelle von "g" verwenden.

Siehe eine printf reference here.

1

Es gibt < float.h> enthält viele nützliche Werte, darunter DECIMAL_DIG, die für eine lange Doppel jedoch ist.

Die gleiche Datei wird wahrscheinlich Ihnen sagen, dass ein Doppel auf Ihrer Plattform mehr als 6 Ziffern der Präzision hat ...

PS: Auch oben Antwort Demis beachten. Er weist auf verschiedene Fehler in Ihrem Druck hin, die mir entgangen sind.

1

Der maximale Exponent eines IEEE-Double ist 1023, also das größte Double wird 1 + 1/2 + 1/4 + 1/8 + ... usw. * 2^1023. Das wird etwa 318 Zeichen lang sein, in Dezimalschreibweise.

Warum nicht den Formatbezeichner "e" verwenden?

+0

Nicht alle Plattformen verwenden IEEE-Double, deshalb hat der Standardisierungsausschuss < float.h > ... – DevSolar

Verwandte Themen