Die Grenzen der Gleitkommasystems in C ++

Obwohl Floating-Point-Variablen in C ++ können viele Rechenprobleme zu lösen, wie Trunkierung, haben sie einige Einschränkungen selbst - das Gegenteil von denen mit Integer-Variablen verbunden. Gleitkomma-Variablen können nicht verwendet werden, um Dinge zu zählen, sind schwieriger für den Computer zu handhaben, und leiden auch unter Rundungsfehler (wenn auch nicht annähernd in gleichem Maße wie int

Menu

Variablen).

Zählen

Sie können nicht Floating-Point-Variablen in Anwendungen, in denen das Zählen von Bedeutung ist. Dazu gehören C ++, die Zählung konstruiert. C ++ kann nicht durch eine gegebene Fließkommazahl gemeint, die ganze Zahl Wert überprüfen.

Zum Beispiel ist es an Ihnen klar, dass 1,0 1 ist aber nicht so klar zu C ++. Was etwa 0,9 oder 1,1? Sollten diese auch als 1 angesehen werden? C ++ vermeidet einfach das Problem, indem sie auf mit int Werte, wenn beteiligt ist zu zählen.

Rechengeschwindigkeit

Historisch gesehen, kann ein Computer-Prozessor Integer-Arithmetik schneller verarbeiten als es kann Gleitkomma-Arithmetik. Während also ein Prozessor 1 Million Integer-Zahlen in einer bestimmten Menge an Zeit hinzufügen können, kann der gleiche Prozessor in der Lage sein, nur 200.000 auszuführen Gleitkommarechnungen während des gleichen Zeitraums.

Berechnungsgeschwindigkeit wird immer weniger ein Problem als Mikroprozessoren schneller. Zudem gehören Universal-Mikroprozessoren von heute spezielle Floating-Point-Schaltung an Bord, die Leistung dieser Operationen zu erhöhen. Allerdings Arithmetik auf ganzzahlige Werte ist nur ein verdammt viel einfacher und schneller als die gleiche Operation an Fließkommawerte.

Genauigkeitsverlust

Gleitkommaoperationen schweben Variablen haben eine Genauigkeit von etwa 6 Ziffern und ein extra-Wirtschaft Größe, Doppel-Stärke-Version schweben als ein bekannter doppelt kann etwa 13 signifikanten Stellen handhaben. Dies kann auch Abrundungsprobleme verursachen.

Bedenken Sie, dass 1 # 8260-3 als 0.333 ausgedrückt wird # 133- in einer kontinuierlichen Abfolge. Das Konzept einer unendlichen Reihe ist sinnvoll in math aber nicht an einen Computer, da es eine endliche Genauigkeit besitzt. Das FloatAverage Programm gibt 1.66667 als der Durchschnitt 1, 2 und 2 - das ist viel besser als die 0-Ausgang durch die IntAverage Version aber nicht einmal in der Nähe einer unendlichen Folge.

C ++ kann in vielen Fällen für Rundungsfehler zu korrigieren. Beispielsweise am Ausgang kann C ++ manchmal feststellen, dass der Benutzer wirklich 1 anstelle von 0,999999 gemeint. In anderen Fällen kann auch C ++ nicht korrekt für Rundungsfehler.

Nicht-so-begrenzte Reichweite

Obwohl die doppelt Datentyp einen Bereich wesentlich größer ist als die einer ganzen Zahl hat, ist es immer noch begrenzt. Der Maximalwert für ein int ist ein skosh mehr als 2 Milliarden. Der Maximalwert von a doppelt Variable ist in etwa 10 bis 38. Macht. Das ist 1, gefolgt von 38 zeroes- es isst 2 Milliarden für das Frühstück.

Nur die ersten 13 Stellen oder so von a doppelt haben jede sinn- die restlichen 25 Stellen sind Geräusche zu Gleitkommazahlen Rundungsfehler erlegen zu haben.

Menü