die Genauigkeit von printf mit dem Spezifizierer "% g"

9

Kann mir jemand erklären, wie das [.precision] in printf mit dem Spezifizierer "% g" funktioniert? Ich bin ziemlich verwirrt von der folgenden Ausgabe:

%Vor%

Ich habe gelernt, dass %g die kürzeste Darstellung verwendet.

Aber die folgenden Ausgaben verwirren mich immer noch

%Vor%

Meine Frage ist: Warum gibt %.16g die genaue Anzahl an, während %.17g nicht?

Es scheint, dass 16 signifikante Ziffern genau sein können. Könnte mir jemand den Grund sagen?

    
cssmlulu 05.06.2015, 05:26
quelle

1 Antwort

2

%g verwendet die kürzeste Darstellung.

Gleitkommazahlen im Computer werden nicht mit der Basis gespeichert von 10 , aber 2 . Das bedeutet, dass es in der Regel einige Rundungsfehler gibt, wenn eine Dezimalzahl in einem Fließkomma-Binärwert dargestellt wird.

Wenn Sie %.16g angeben, sagen Sie, dass Sie die kürzeste Darstellung mit einem Maximum von 16 signifikant signifikanten Ziffern wünschen.

Wenn die kürzeste Darstellung mehr als 16 Ziffern hat, wird printf sie verkürzen. Kürzung wird die 2 am Ende schneiden, so dass Sie mit 3122.550000000000 , das ist tatsächlich 3122.55 in der kürzesten Form, das ist, warum die Zahl.

%g gibt Ihnen immer das kürzeste mögliche Ergebnis, aber wenn Sie sagen, dass Sie 17 Genauigkeitsstellen möchten, und 17 th Stelle einen Wert enthält, der sich von 0 unterscheidet, erhalten Sie am Ende alle Nullen und der Wert am Ende: 3122.5500000000002 .

  

Meine Frage ist: warum %.16g gibt die genaue Anzahl, während %.17g   kann nicht?

Es ist tatsächlich die %.17g , die Ihnen das genaue Ergebnis gibt, während %.16g Ihnen nur eine ungefähre Rundung mit einem Fehler liefert (im Vergleich zum Wert im Speicher).

Wenn Sie eine festere Genauigkeit wünschen, verwenden Sie stattdessen %f oder %F .

    
user35443 05.06.2015 05:31
quelle

Tags und Links