Frage von itsDesch, 26

Was bedeutet die genauigkeit bei gleitpunkttypen?

Hi, Ich lerne gerade die Programmiersprache C. Und hätte eine Frage zu gleitpunktdatentypen( float, Double, long Double). Wofür steht die genauigkeit? Ein float hat zb einen Wertebereich von 1.2E-38 bis 3.4E+38. Das wäre zb 3.4 mit 38 Nullen hintendran?? Aber eine genauigkeit von 6 stellen. Was bedeutet das für das ausführen von Arithmetik mit float?

Freundliche grüße

Antwort
von wotan38, 7

Wenn man von einer 100-stelligen Zahl nur die ersten 10 konkret angibt, die restlichen Stellen mit Nullen auffüllt, weist diese Zahl eine Ungenauigkeit aus, die davon abhängt, wieviele Stellen von den möglichen tatsächlich angegeben werden.

Die Größe des Weltalls, das sich mit Lichtgeschwindigkeit ausdehnt, wird in 10 hoch 80 ccm angegeben, also eine 80-stellige Zahl. In 10 Jahren ist die Zahl immer noch 80-stellig. Der Zuwachs in den 10 Jahren wirkt sich nur auf die hinteren Stellen der Zahl aus und liegen im Bereich der vorhandenen Ungenauigkeit.

Bei statistischen Aufgaben, wo es um Differenzen sehr großer (oder sehr kleiner) Zahlen geht, gibt es häufig Probleme mit der Genauigkeit der Gleitkommazahlen. Etwas Abhilfe schafft da die Gleitkommazahl mit doppelter Genauigkeit, die die meisten Rechner anbieten.

Antwort
von Brotmensch89, 20

Bei der Genauigkeit geht es um Nachkommastellen. Das heißt, wenn du mit 2 Float-Variablen die selbe Rechung ausführst, kann es sein, dass sie nach der 6 Nachkommastelle verschiedene Werte haben.

Kommentar von wotan38 ,

Die Ungenaugigkeit beim Rechnen mit Gleitkommazahlen hängt nicht vom Zufall ab. Die Ungenauigkeit ist genau definiert und besteht aus dem Ersetzen der hinteren Stellen durch Nullen. Die selbe Rechnung ergibt jedesmal den gleichen Wert mit der gleichen Ungenauigkeit.

Im Grunde handelt es sich bei der Ungenauigkeit nicht um Rechenfehler, sondern um eine grobe Größenangabe. Wenn ich z.B. 586374 € im Lotto gewonnen habe und mir ein Haus für 395763 € kaufe, bleiben mir 586000 - 395000 = 191000 übrig. Genau gerechnet wären es 190611. Für viele Fälle reicht diese Genauigkeit vollkommen aus. Wenn der Finanzminister die Kosten für etwas beziffert, nennt er auch nur die Milliarden oder Millionen, obwohl es sich bei dieser Zahl um keine runde Zahl handelt.     

Kommentar von Brotmensch89 ,





Die Ungenaugigkeit beim Rechnen mit Gleitkommazahlen hängt nicht vom Zufall ab. Die Ungenauigkeit ist genau definiert und besteht aus dem Ersetzen der hinteren Stellen durch Nullen. Die selbe Rechnung ergibt jedesmal den gleichen Wert mit der gleichen Ungenauigkeit.

Hast du eine Quelle dazu?

Denn soweit ich weiß, sollte man solche Sachen, wie das Folgende vermeiden:

float a = 1;

if( a==1.00000000000000000000)

printf("float ist genauer als gedacht");

else 

printf("Offenbar stimmt hier was nicht");


Ich gebe aber zu, es ist schon eine Weile her, dass ich mich damit beschäftigt habe.



Antwort
von itsDesch, 8

Danke dafür. Wie kommt es zustande dass der Datentyp einen so großen Wertebereich hat, dann aber eine Ungenauigkeit beim rechnen entsteht. Ich dachte immer in Computern läuft alles exakt und genau, so wie in der Mathematik.?

Kommentar von wotan38 ,

Die Ungenauigkeit bei den Gleitkommazahlen hat nichts mit einem ungenauen Rechnen zu tun. Es geht hierbei um eine definierte Ungenauigkeit. Wenn ich 42,17 Liter Super für 1,299 tanke, kostet das 42 * 1,30 = 54,60. Wo ist hier an der Rechnung was falsch? Das kann ich hundert mal rechnen und bekomme immer das gleiche Ergebnis.

Keine passende Antwort gefunden?

Fragen Sie die Community