Warum werden Gleitkommazahlen in Naturwissenschaften / Technik häufig verwendet?

33

Bei der Untersuchung der Genauigkeit von Gleitkommazahlen habe ich an einigen Stellen eine ähnliche Aussage gesehen

" float und double sind ( für / verwendet oft in ) Ingenieurwesen und wissenschaftliche Berechnung "

Nach meinem Verständnis ist die Stärke von Floats und Doubles die Menge an Speicher, die sie für ihre (gute, aber nicht perfekte) Präzision verwenden.

Ich habe das Gefühl, dass ich durch diese Antwort fast ein Verständnis bekomme

"Mit Gleitkommazahlen können Sie kontinuierliche Größen modellieren"

Ich bin immer noch nicht davon überzeugt, dass ich es verstehe. Ingenieurwissenschaften und Naturwissenschaften klingen beide wie Bereiche, in denen Sie genaue Ergebnisse aus Ihren Berechnungen erhalten möchten , die meines Wissens keine Fließkommazahlen ergeben. Ich bin mir auch nicht sicher, was genau eine "kontinuierliche Menge" ist.

Kann jemand diese Erklärung erläutern und vielleicht ein Beispiel geben?

DoubleDouble
quelle
2
Siehe floating-point-gui.de
Basile Starynkevitch
47
Engineering and Science both sound like fields where you would want precise results from your calculations, which, from my understanding, floating points do not give.In Wissenschaft und Technik geht es Ihnen nur um Präzision bis zu einem bestimmten Punkt. Die Verwendung von unendlicher Präzision für jede Berechnung ist häufig unnötig teuer. Was Fließkomma von Festkomma unterscheidet, ist, dass Sie sich nicht auf eine bestimmte Anzahl von Dezimalstellen festlegen müssen - Sie können wirklich kleine Mengen mit vielen Dezimalstellen oder wirklich große Mengen mit begrenzter Genauigkeit haben.
Doval
24
Um die oben genannten Punkte zu ergänzen, interessiert Sie die Genauigkeit nicht nur über einen bestimmten Punkt hinaus, Sie können auch keine willkürlich genauen Ergebnisse erhalten, da es sich bei vielen Ihrer Eingaben um Messgrößen handelt, die einen inhärenten Fehler aufweisen.
2
Es ist auch ein Zorn, der darauf hinweist, dass es nicht selbstverständlich ist, dass sich die Rundungsfehler auch weiterhin ansammeln. Es hängt davon ab, was Sie tun und wie Sie es tun. Dafür gibt es ein ganzes Feld .
Doval
10
Fließkommazahlen sind keine "Zufallsgenauigkeiten", die Fehler für verschiedene Operationen sind vorhersehbar und bekannt, und die Fehler für einen Algorithmus können berechnet werden. Wenn sie niedrig genug sind (und insbesondere wenn Ihre Rückwärtsfehler kleiner als die Unsicherheiten in Ihren Eingabevariablen sind), können Sie sicher sein, dass Ihre Ergebnisse gut sind (oder zumindest, dass Probleme mit ihnen nicht durch Floating verursacht werden). Punktfehler).
Hobbs

Antworten:

77

Die Berechnung in Wissenschaft und Technik erfordert Kompromisse in Bezug auf Präzision, Reichweite und Geschwindigkeit. Festkomma-Arithmetik liefert Präzision und angemessene Geschwindigkeit, beeinträchtigt jedoch die Reichweite. BigNum, beliebige Präzisionsbibliotheken, gewinnen an Reichweite und Präzision, verlieren jedoch an Geschwindigkeit.

Der springende Punkt ist, dass die meisten wissenschaftlichen und technischen Berechnungen eine hohe Geschwindigkeit und eine große Reichweite erfordern, jedoch nur einen relativ geringen Präzisionsbedarf haben. Die am besten bestimmte physikalische Konstante ist nur bis zu 13 Stellen bekannt, und viele Werte sind mit weitaus geringerer Sicherheit bekannt. Mehr als 13 Stellen Genauigkeit auf dem Computer zu haben, wird das nicht helfen. Das Problem in der Salbe ist, dass Sequenzen von Gleitkommaoperationen allmählich an Präzision verlieren können. Das A und O der numerischen Analyse ist es, herauszufinden, welche Probleme besonders anfällig sind, und clevere Wege zu finden, die Abfolge der Operationen neu zu ordnen, um das Problem zu verringern.

Eine Ausnahme bildet die Zahlentheorie in der Mathematik, die arithmetische Operationen an Zahlen mit Millionen von Ziffern, aber mit absoluter Genauigkeit ausführen muss. Zahlentheoretiker verwenden häufig BigNum-Bibliotheken, und ihre Berechnungen nehmen viel Zeit in Anspruch.

Charles E. Grant
quelle
2
Gute Antwort. Während die zugrundeliegenden Funktionen vollkommen stetig sein können, was eine vollkommene Präzision zur exakten Modellierung erfordern würde, ist die Realität, dass alles in Wissenschaft und Technik eine Annäherung ist. Wir möchten lieber anständige, nützliche Näherungswerte haben und etwas erreichen als unendliche Präzision, auf die wir ewig warten würden, bis viele Operationen abgeschlossen sind.
Jonathan Eunice
4
@ JonathanEunice Sie können die Realität nicht genau modellieren. Die Eingabe für das Modell stammt aus Messungen, und Sie werden wahrscheinlich nie in der Lage sein, Dinge so genau zu messen, dass eine native reelle Zahl in einem modernen Computer / einer modernen Software (zu der Zeit) dies einschränken würde. Mit anderen Worten, Sie können ein perfektes Modell, eine perfekte Software oder ein perfektes mathematisches Modell haben, das spielt keine Rolle. ZB Berechnen Sie das Volumen einer Box. a*b*ceinfache Sache, aber Sie müssen die Dimensionen messen, die Sie nicht mit absoluter Sicherheit tun können, so dass Sie sowieso nicht wirklich unendlich genaue Berechnungen benötigen, gerade genug, um durch Messfehler gebunden zu sein.
Luk32
2
@ luk32 Über die meisten dieser Punkte sind wir uns sehr einig. Man kann etwas genau modellieren (zB das Volumen einer Kugel), aber niemals genau messen. Und die Realität passt nie perfekt zu einem perfekten Modell. Es ist besser, etwas ungenaue, nützliche Werte / Modelle zu erhalten, als auf perfekte Messungen oder Berechnungen zu warten - etwas, das immer einen Schritt entfernt sein wird.
Jonathan Eunice
2
„Der springende Punkt ist, dass die meisten wissenschaftlichen und technischen Berechnungen eine hohe Geschwindigkeit und eine große Reichweite erfordern.“ Wenn ich Ihnen viel Zeit gebe, können Sie immer noch nicht genau rechnen, da Algorithmen für die genaue Berechnung weitgehend unbekannt sind. Und erstens können wir nicht einmal Zahlen genau darstellen. Dies ist nur ein Problem, das wir weder schnell noch langsam lösen können.
Michael Le Barbier Grünewald
@ MichaelGrünewald, wir können keine reellen Zahlen exakt darstellen, aber wir sind in der Lage, Probleme so genau zu lösen, dass wir mehrere tausend Fuß hohe Strukturen aufbauen, Gene in der DNA identifizieren und nach zwei Jahren einen Satelliten mit einem Kometen treffen können im Weltraum. Randy Newman zu umschreiben, das mag nicht genau sein, aber es ist in Ordnung. Tatsächlich können wir Rationales mit beliebigen Präzisionsbibliotheken exakt darstellen (abhängig von Speicherbeschränkungen).
Charles E. Grant
30

Welche Alternative schlagen Sie vor?

Kontinuierliche Größen werden in der Mathematik mit reellen Zahlen dargestellt. Es gibt keinen Datentyp, der jede mögliche reelle Zahl codieren kann (da es unzählige reelle Zahlen gibt). Das bedeutet, dass wir nur eine Teilmenge der reellen Zahlen auswählen können, an denen wir am meisten interessiert sind.

  • Sie können alle berechenbaren Real-Werte auswählen, ähnlich wie dies bei Computeralgebra-Systemen (CAS) der Fall ist. Das Problem ist, dass es schnell undurchführbar wird, wenn Ihr Ausdrucksbaum größer und größer wird. Es ist auch sehr langsam: Versuchen Sie, ein riesiges System von Differentialgleichungen in Mathematica symbolisch zu lösen, und vergleichen Sie es mit einer anderen Implementierung auf Gleitkommabasis. Sie werden einen dramatischen Geschwindigkeitsunterschied feststellen. Darüber hinaus haben Jörg W. Mittag und Kasperd darauf hingewiesen: Sie haben nicht einmal entscheidbare Gleichheits- / Vergleichsoperationen.

  • Sie könnten exakte rationale Zahlen verwenden, aber das funktioniert für viele Anwendungen nicht wirklich, da Sie Quadratwurzeln oder Kosinusse oder Logarithmen usw. berechnen müssen. Außerdem besteht die Tendenz, dass Rationalitäten immer komplexer werden und daher mehr Speicherplatz benötigen und Zeit für die Verarbeitung, wenn Sie immer mehr Berechnungen an ihnen durchführen.

  • Sie können auch Dezimalstellen mit beliebiger Genauigkeit verwenden, aber selbst eine einfache Division funktioniert nicht, da sich die Ziffern unendlich oft wiederholen. Sie können auch auf das Problem der zunehmenden Komplexität stoßen, wenn Sie rationale Zahlen ähnlicher ausführen, wenn auch in geringerem Maße.

Sie müssen also irgendwann Näherungswerte verwenden. In diesem Fall sind Gleitkommazahlen am besten geeignet. Gleitkommazahlen haben ebenfalls eine feste Breite (im Gegensatz zu allen anderen drei zuvor erwähnten Datentypen), wodurch die Komplexität nicht zunimmt, wenn Sie immer mehr Berechnungen an ihnen durchführen.

Rufflewind
quelle
1
Eine der besten Antworten, ich habe sie übersehen, bevor ich meine geschrieben habe.
Michael Le Barbier Grünewald
8
Hinzu kommt die etwas unangenehme Tatsache, dass Sie nicht einmal feststellen können, ob zwei berechenbare Realwerte gleich sind.
Jörg W Mittag
1
Wäre es nicht problematisch, alle berechenbaren Reals zu verwenden, wenn Vergleiche durchgeführt würden? Ich bin mir ziemlich sicher, dass Sie keine beliebigen berechenbaren Real-Werte vergleichen können, ohne das Halteproblem zu lösen.
Kasperd
@kasperd: Ich denke, das würde in gewissem Maße davon abhängen, welche Operationen man in der Berechnung verwenden durfte, obwohl ich nicht sicher bin, wie umfangreich ein Satz von Berechnungstypen sein könnte und dennoch garantieren kann, dass zwei beliebige Ergebnisse vorliegen könnten in einer endlichen Anzahl von Operationen produziert konnte in begrenzter Zeit verglichen werden. Algebraische Typen würden mit ziemlicher Sicherheit dieses Kriterium erfüllen, aber ich weiß nicht, ob ln (x) - und exp (x) -Funktionen hinzugefügt werden können und es trotzdem erfüllen.
Supercat
Sie können Arithmetik beliebiger Genauigkeit (Addieren, Multiplizieren, Subtrahieren, Dividieren), Irrationales (wie √2), bekannte Transzendentale (wie Pi und e), Triggerfunktionen usw. mit fortgesetzten Brüchen unterstützen. Siehe Gospers Algorithmus in HAKMEM. Wenn Sie fertig sind, können Sie eine verzögerte Auswertung durchführen, um eine Gleitkommanäherung an die gewünschte Genauigkeit zu erhalten.
Paul Chernoch
14

Ihr Satz über die Wissenschaft ist falsch, Ingenieurwissenschaften und andere Wissenschaften als Mathematik arbeiten nicht mit exakten genauen Ergebnissen. Sie arbeiten mit einem Genauigkeitsfaktor, der in die Anzahl der angezeigten Stellen integriert ist.

Der Schlüsselbegriff, den Sie hier verstehen müssen, lautet: signifikante Zahlen . Die signifikanten Ziffern einer Zahl sind die Ziffern, deren Bedeutung zur Genauigkeit beiträgt.

Was im Grunde bedeutet, wenn ich angabe, dass etwas 12 Zentimeter lang ist, kann es tatsächlich zwischen 11,5 und 12,5 Zentimeter lang sein. Wenn ich jedoch sage, dass etwas 12,00 Zentimeter lang ist, kann es irgendwo zwischen 11.995 und 12.005 Zentimeter lang sein.

Nur als Illustration, wenn Sie ein Maßband nehmen und Ihr Wohnzimmer messen. Obwohl Sie vielleicht feststellen, dass es 6 Meter bis 25 Zentimeter breit ist, wissen Sie, dass Ihr Maßband nicht genau genug ist, um etwas über die Millimeter- oder Nano-Meter-Genauigkeit zu sagen.

Pieter B
quelle
@leftaroundabout was meinst du mit Mathe (wie in Mathematik) ist nicht Wissenschaft? In meinem Buch ist es.
Pieter B
2
@PieterB: Mathe ist nicht Wissenschaft. Das ist Philosophie. Wissenschaft ist der Akt des Verständnisses unserer physischen Welt. Philosophie ist der Akt des Verstehens, wie Ideen in einer idealen Welt funktionieren.
Slebetman
Ich denke, die Wissenschaft arbeitet normalerweise lieber mit expliziten Vertrauensbereichen als mit signifikanten Zahlen.
Taemyr
@slebetman Abgesehen davon hat es nichts mit meinem Punkt in meinem Beitrag zu tun, ob Mathematik eine Wissenschaft ist oder nicht. Ich kann mir nicht helfen, ein Zitat zu fallen: Die Natur ist von Natur aus mathematisch und sie spricht uns in Mathematik an. Wir müssen nur zuhören. Weil die Natur mathematisch ist, ist jede Wissenschaft, die die Natur beschreiben will, vollständig von der Mathematik abhängig. Es ist unmöglich, diesen Punkt zu überbetonen, und deshalb nannte Carl Friedrich Gauß die Mathematik "die Königin der Wissenschaften".
Pieter B
Das Zitat stammt von hier . Eine gute Lektüre und viel zu diskutieren, aber nicht hier, da es in der Tat nichts mit Ihrem Beitrag oder dieser Frage zu tun hat.
links um 22.10.14 Uhr
7

Beachten Sie, dass Gleitkommazahlen im Grunde genommen der wissenschaftlichen und technischen Notation entsprechen, der Standardmethode für Menschen, um Zahlen in Mathematik und Naturwissenschaften zu schreiben. In diesen Bereichen besteht kein großes Bedürfnis nach äußerster Präzision, aber es gibt oft eine große Bandbreite.

Um ein zufälliges Beispiel aus meinen Physik-Hausaufgaben zu wählen, musste ich kürzlich mit der Masse eines Elektrons arbeiten, die ungefähr 9,11 * 10 ^ -31 kg beträgt. Die Präzision ist mir egal. es könnte leicht 9.12 sein, wenn es mich interessiert. Aber ich interessiere mich für den Exponenten und möchte nicht 0,0000 ... 911 kg ausschreiben müssen, also verwende ich die wissenschaftliche Notation.

Ähnliches gilt für das wissenschaftliche und technische Rechnen: Es gibt eine große Bandbreite, aber wir möchten nicht, dass sehr große Zahlen gespeichert und verarbeitet werden. Daher speichern wir einen normalisierten Wert und einen Exponenten, mit dem kleiner und schneller gearbeitet werden kann.

raptortech97
quelle
6

Gleitkommazahlen haben auch mehrere Eigenschaften, die sich gut für die Berechnung bestimmter Arten von wissenschaftlichen Ergebnissen eignen. Vor allem ist die Präzision umgekehrt proportional zur Größe, genau wie in der wissenschaftlichen Notation, sodass Sie sowohl kleine Unterschiede nahe Null als auch größere Unterschiede in größerer Entfernung darstellen können.

Goldbergs Artikel ist wahrscheinlich die bekannteste Analyse der Eigenschaften von Gleitkommazahlen (und sollte unbedingt gelesen werden, wenn Sie sich für so etwas interessieren), aber Kahans Artikel sind meiner Meinung nach besser geeignet, die Hintergründe für viele der subtilen Aspekte zu erklären Designprobleme.

Insbesondere die Kahan Tirade über Java-Implementierung von Floating - Point , während ziemlich entzündlich, macht einige gute Punkte , warum IEEE-754 - Semantik sind nützlich, und Much Ado About Nothing Zeichen des Bit untersucht die Gründe für signierte Null in beträchtlicher Tiefe.

Daniel Pryden
quelle
Ich habe noch nicht die ganze Zeitung von Kahan gelesen, aber er scheint höflicher zu sein als ich. Java hätte Zahlen haben können, die nützlicher und schneller waren als das, was es tatsächlich hat, wenn es einen realTyp hinzugefügt hätte, der drei Stapeleinträge zum Speichern benötigt und die natürliche Rechengenauigkeit der Maschine darstellt. Der Wert kann als 80-Bit-Float + 16-Bit-Padding, 64-Bit-Float + 32-Bit-Padding oder 64-Bit-Mantisse, 16-Bit-Exponent und 16-Bit-Padding für Vorzeichen und Flags [für Nicht-FPU-Implementierungen] gespeichert werden.
Superkatze
Geben Sie an, dass floatund doubleSpeicherformate sind, undreal ist das Berechnungsformat. In vielen Systemen ohne FPU ist die Arbeit mit einer Mantisse, einem Exponenten und Flags, die sich an Wort- und Halbwortgrenzen befinden, schneller, als wenn bei jeder Operation Doppelte entpackt und neu gepackt werden müssten.
Supercat
2

TL; DR Wir wissen nicht, wie man die meisten Funktionen mit perfekter Genauigkeit berechnet, daher macht es keinen Sinn, Zahlen mit perfekter Genauigkeit darzustellen.

Bei allen bisherigen Antworten fehlt der wichtigste Punkt: Für die meisten Zahlen können wir keine exakten Werte berechnen. Als wichtiger Sonderfall können wir keine exakten Werte der Exponentialfunktion berechnen - um nur die wichtigste irrationale Funktion zu nennen.

Naive Antwort auf die naive Frage

Ihre Frage scheint eher zu lauten: "Es gibt exakte arithmetische Bibliotheken. Warum verwenden wir sie nicht anstelle von Gleitkomma-Arithmetik?" Die Antwort lautet, dass exakte Arithmetik mit rationalen Zahlen funktioniert und dass:

  • Archimedes Nummer - der pedantische Name von π - ist nicht rational.
  • Viele andere wichtige Konstanten sind nicht rational.
  • Viele andere wichtige Konstanten sind nicht einmal als rational bekannt oder nicht.
  • Für jede von Null verschiedene rationale Zahl x die Zahl exp (x) irrational.
  • Ähnliche Aussagen gelten für Radikale, Logarithmen und eine Fülle von Funktionen, die für Wissenschaftler wichtig sind (Gaußsche Verteilung, CDF, Bessel-Funktionen, Euler-Funktionen,…).

Die rationale Zahl ist ein glücklicher Zufall. Die meisten Zahlen sind nicht rational (siehe Baires Theorem), so dass die Berechnung von Zahlen uns immer aus der rationalen Welt herausbringen wird.

Was rechnet und repräsentiert eine Zahl?

Wir können reagieren, indem wir sagen: "OK, das Problem ist, dass rationale Zahlen keine so gute Wahl waren, um reelle Zahlen darzustellen." Dann rollen wir Debian auf und entwickeln ein neues Darstellungssystem für reelle Zahlen.

Wenn wir Zahlen berechnen wollen, müssen wir ein Repräsentationssystem für reelle Zahlen auswählen und wichtige Operationen auf diesen beschreiben - dh definieren, was Rechnen bedeutet. Da wir an wissenschaftlichem Rechnen interessiert sind, möchten wir alle Dezimalzahlen (unsere Maße), ihre Quotienten (rationale Zahlen), Werte der Exponentialfunktionen und einige lustige Konstanten, wie die Zahl von Archimede, genau darstellen.

Das Problem ist, dass die einzige Möglichkeit, Zahlen in einem solchen System perfekt darzustellen, darin besteht, die symbolische Form zu verwenden, also überhaupt nichts zu berechnen und mit algebraischen Ausdrücken zu arbeiten. Dies ist eine ziemlich verkrüppelte Darstellung von reellen Zahlen, weil wir zwei Zahlen nicht zuverlässig vergleichen können (welche ist größer)? Wir können die Frage „Ist die angegebene Zahl gleich 0?“ Nicht einmal leicht beantworten.

Wenn Sie nach genaueren mathematischen Definitionen und Problemen suchen, suchen Sie beispielsweise nach rationalen Zahlen, transzendentalen Zahlen, besten Approximationen und dem Satz von Baire.

Michael Le Barbier Grünewald
quelle
Ich denke, dies ist eine großartige Antwort, nur nicht auf diese Frage, insofern ich nicht zuversichtlich bin, dass der Fragesteller Ihre Argumente verstehen wird. Das und Sie sind ziemlich zufrieden mit der ungenauen Darstellung von \ reellen oder \ komplexen Zahlen durch eine endliche digitale Darstellung (unabhängig von der dynamischen oder statischen Bitbreite). Das ist alles völlig richtig, aber nebensächlich. Ein großes Lob dafür, dass er Goldberg nicht von Robotern zitiert. :) Und Baires Theorem ist nicht Teil der üblichen Rhetorik, die man bei Programmierern oder StackOverflow findet.
Mctylr
0

weil

1) Die Autoren gehen davon aus, dass "technische und wissenschaftliche Berechnungen" reale physikalische Größen messen

2) Physikalische Größen sind stetig und genau so, wie Sie "Gleitkommazahlen lassen Sie stetige Größen modellieren" angeben.

.. und der Rest meiner Antwort wird gut von Rufflewind zusammengefasst , also werde ich das hier nicht wiederholen.

Jan Doggen
quelle
0

Gleitkommazahlen bieten eine relative Genauigkeit: Sie können Zahlen darstellen, die höchstens einen kleinen Prozentsatz (wenn Sie etwa 0,0000000000001% prozentual nennen möchten) von jeder genauen Zahl in einem weiten Bereich von Zahlen entfernt sind. Sie teilen dieses Merkmal mit einem Rechenschieber, obwohl letzterer nicht besser wird als etwas mit einer Genauigkeit von 3 Stellen. Dennoch war es völlig ausreichend, um die statischen und dynamischen Kräfte großer Strukturen zu ermitteln, bevor digitale Computer dafür zur Gewohnheit wurden, und das liegt daran, dass die Materialkonstanten auch einige Variationen aufweisen und die Auswahl von Konstrukten, die in Bezug auf Material- und Konstruktionsunterschiede relativ harmlos sind, tendenziell ist maximale Belastungen und Schwachstellen sinnvoll identifizierbar zu machen.

Jetzt ist "Genauigkeit" ein nützliches Merkmal für viele Zahlen, die Messungen und / oder Größen von physikalischen Eigenschaften darstellen.

Nicht alles in Wissenschaft / Technik gehört in diese Kategorie. Wenn Sie zum Beispiel zahlentheoretische Transformationen zum Multiplizieren großer Zahlen oder Galois-Felder zum Manipulieren von Fehlerkorrekturpolynomen verwenden, gibt es keinen kleinen Fehler: Jeder einzelne Bitfehler während der Verarbeitung führt zu Ergebnissen, die nicht vollständig zufällig sind Lärm.

Selbst in diesen Bereichen kann man mit Gleitkommazahlen arbeiten (wie bei der Faltung mit komplexen FFTs), wenn man die Anhäufung von Fehlern verfolgt und sicherstellt, dass die Gleitkommafehler nicht so groß sind, dass möglicherweise sogar ein einzelnes Bit eingekippt wird die tatsächlichen Entitäten, von denen sie eine Annäherung sind. Für solche Annäherungen wäre eine Festkommaverarbeitung wahrscheinlich geeigneter, aber Gleitkommaeinheiten im Feld neigen dazu, eine schnellere Operation und eine größere Anzahl verwendbarer Bits bereitzustellen.

Auch Programmiersprachen wie C oder Fortran erschweren überraschend den Zugriff auf Grundoperationen wie Multiplikation und Division mit gemischter Genauigkeit oder ein Übertragsbit für Addition / Subtraktion. Dies sind grundlegende Bausteine, um über Ganzzahlen mit begrenzter Genauigkeit hinauszugehen.

Wenn Sie also Operationen auf Gleitkommazahlen abbilden können, verfügen Sie heutzutage in der Regel über ausreichend leistungsfähige Hardware und können Ihre Algorithmen in einer der heutigen allgemeinen Programmiersprachen gut spezifizieren.

user153796
quelle
0

Ich denke, dies kann beantwortet werden, indem angesprochen wird, für welche Anwendungen float/ doubleDatentypen sie nicht geeignet sind.

Wenn Sie sicherstellen müssen, dass Sie eine Zahl mit einer bestimmten Anzahl von Ziffern genau darstellen können, sind Gleitkommazahlen ungeeignet, da sie die Zahlen als Zweierpotenzen anstelle von Zehnerpotenzen darstellen, wie wir sie in darstellen die wahre Welt.

Eine Domäne, in der Gleitkomma-Datentypen nicht verwendet werden sollten, ist die der Finanzen *. Für das Kernsystem einer Bank wäre es völlig inakzeptabel, wenn ein Betrag, der 100000,01 USD hätte betragen sollen, plötzlich 100000,00 USD oder 100000,02 USD beträgt.

Ein solches Problem kann bei der Verwendung von Floats leicht auftreten, insbesondere wenn die Zahl das Ergebnis einer oder mehrerer Berechnungen war, z. B. die Berechnung der Summe aller Transaktionen in einem Konto.

Engineering und wissenschaftliche Berechnung sind Bereiche, in denen diese relativ kleinen Rundungsfehler akzeptabel sind. Benutzer sind sich normalerweise bewusst, dass alle Zahlen eine begrenzte Genauigkeit haben und sie arbeiten oft mit einer Reihe von signifikanten Ziffern . Vor allem aber haben sie eine genau definierte relative Genauigkeit, dh sie haben die gleiche Anzahl signifikanter Stellen, sowohl für sehr große Zahlen als auch für sehr kleine Zahlen.

* Ich habe einmal an einer Finanzanwendung gearbeitet, bei der floats zur Darstellung von Werten verwendet wurde, und in der Folge wurden Rundungsfehler eingeführt. Glücklicherweise war dieser spezifische Fehler überhaupt nicht kritisch, die Benutzer haben sich über Rechenfehler im Programm beschwert. Und dies führte zu einem anderen, viel schlimmeren Effekt: Die Benutzer begannen, das Vertrauen in das System zu verlieren.

Pete
quelle