webentwicklung-frage-antwort-db.com.de

Festpunkt vs Gleitkommazahl

Ich kann Festkomma- und Gleitkommazahlen einfach nicht verstehen, da die Definitionen in Google nur schwer zu lesen sind. Aber keine, die ich gelesen habe, liefert eine einfache Erklärung dafür, was sie wirklich sind. Kann ich eine einfache Definition mit Beispiel bekommen?

94
user942451

Bei einer Festkommazahl ist eine bestimmte Anzahl von Bits (oder Ziffern) für den ganzzahligen Teil (den Teil links vom Dezimalpunkt) und eine bestimmte Anzahl von Bits für den Bruchteil (den Teil rechts vom Dezimalpunkt) reserviert Punkt). Egal wie groß oder klein Ihre Zahl ist, es wird immer die gleiche Anzahl von Bits für jeden Teil verwendet. Wenn Ihr Festkommaformat beispielsweise dezimal IIIII.FFFFF Wäre, wäre die größte Zahl, die Sie darstellen könnten, 99999.99999 Und die kleinste Zahl ungleich Null 00000.00001. Jedes Bit Code, das solche Zahlen verarbeitet, muss wissen, wo sich der Dezimalpunkt befindet.

Eine Gleitkommazahl reserviert keine bestimmte Anzahl von Bits für den ganzzahligen Teil oder den gebrochenen Teil. Stattdessen reserviert es eine bestimmte Anzahl von Bits für die Zahl (genannt die Mantisse oder Signifikand) und eine bestimmte Anzahl von Bits, um wo darin zu sagen Nummer die Nachkommastelle sitzt (genannt Exponent). Eine Gleitkommazahl, die 10 Stellen mit 2 für den Exponenten reservierten Stellen einnahm, könnte also einen größten Wert von 9.9999999e+50 Und einen kleinsten Wert ungleich Null von 0.0000001e-49 Darstellen.

124
Gabe

Eine Festkommazahl bedeutet nur, dass es eine feste Anzahl von Nachkommastellen gibt. Eine Gleitkommazahl erlaubt eine unterschiedliche Anzahl von Nachkommastellen.

Wenn Sie zum Beispiel Zahlen speichern möchten, die genau vier Nachkommastellen benötigen, handelt es sich um einen festen Punkt. Ohne diese Einschränkung ist es Gleitkomma.

Wenn ein fester Punkt verwendet wird, verwendet der Programmierer häufig eine ganze Zahl und geht dann davon aus, dass einige der Ziffern über dem Dezimalpunkt liegen. Zum Beispiel möchte ich vielleicht zwei Stellen Genauigkeit behalten, also bedeutet ein Wert von 100 tatsächlich 1,00, 101 1,01, 12345 123,45 usw.

Gleitkommazahlen sind allgemeiner, weil sie auf die gleiche Weise sehr kleine oder sehr große Zahlen darstellen können, aber es ist ein kleiner Nachteil, zusätzlichen Speicher für die Nachkommastellen zu benötigen.

30
Vaughn Cato

Nach meinem Verständnis erfolgt die Festkomma-Arithmetik unter Verwendung von ganzen Zahlen. Dabei wird der Dezimalteil in einer festen Anzahl von Bits gespeichert, oder die Zahl wird mit der Anzahl der Stellen mit Dezimalgenauigkeit multipliziert.

Wenn zum Beispiel die Zahl 12.34 Gespeichert werden muss und wir nur zwei Nachkommastellen benötigen, wird die Zahl mit 100 Multipliziert, um 1234 Zu erhalten. Wenn wir mit dieser Zahl rechnen, verwenden wir diesen Regelsatz. Das Hinzufügen von 5620 Oder 56.20 Zu dieser Zahl würde 6854 In Daten oder 68.54 Ergeben.

Wenn wir den Dezimalteil einer Festkommazahl berechnen wollen, verwenden wir den Operanden modulo (%).

12.34 (Pseudocode):

v1 = 1234 / 100 // get the whole number
v2 = 1234 % 100 // get the decimal number (100ths of a whole).
print v1 + "." + v2 // "12.34"

Gleitkommazahlen sind eine ganz andere Geschichte in der Programmierung. Der aktuelle Standard für Gleitkommazahlen verwendet 23 Bit für die Daten der Zahl, 8 Bit für den Exponenten und 1, jedoch für das Vorzeichen. Weitere Informationen hierzu finden Sie unter diesem Wikipedia-Link.

4
Mr. Goober

Der Begriff „Festkomma“ bezieht sich auf die entsprechende Art und Weise, in der Zahlen dargestellt werden, mit einer festen Anzahl von Ziffern nach und manchmal vor dem Dezimalpunkt. Bei der Gleitkommadarstellung kann die Platzierung des Dezimalpunkts relativ zu den signifikanten Ziffern der Zahl "gleiten". Beispielsweise kann eine Festkommadarstellung mit einer einheitlichen Dezimalpunkt-Platzierungskonvention die Zahlen 123,45, 1234,56, 12345,67 usw. darstellen, wohingegen eine Gleitkommadarstellung zusätzlich 1,234567, 123456,7, 0,00001234567, 1234567000000000 usw. darstellen könnte.

3
user3553000