it-swarm.com.de

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

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

" float und double sind ( entworfen für/ häufig verwendet 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 fast ein Verständnis dafür bekomme Antwort

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

Ich bin immer noch nicht überzeugt, dass ich verstehe. Technik und Wissenschaft klingen beide wie Felder, in denen Sie genau Ergebnisse Ihrer Berechnungen wünschen, die nach meinem Verständnis Gleitkommawerte nicht ergeben. Ich bin mir auch nicht sicher, ob ich genau befolge, was eine "kontinuierliche Menge" ist.

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

34
DoubleDouble

Berechnungen in Wissenschaft und Technik erfordern Kompromisse in Bezug auf Präzision, Reichweite und Geschwindigkeit. Festpunktarithmetik bietet Präzision und anständige Geschwindigkeit, opfert jedoch die Reichweite. BigNum, willkürliche Präzisionsbibliotheken, gewinnen an Reichweite und Präzision, verlieren aber an Geschwindigkeit.

Der Kern der Sache ist, dass die meisten wissenschaftlichen und technischen Berechnungen eine hohe Geschwindigkeit und eine große Reichweite erfordern, aber einen relativ geringen Bedarf an Präzision haben. Die am besten bestimmte physikalische Konstante ist nur mit etwa 13 Stellen bekannt, und viele Werte sind mit weitaus geringerer Sicherheit bekannt. Wenn Sie mehr als 13 Stellen Genauigkeit auf dem Computer haben, hilft das nichts. Die Fliege in der Salbe ist, dass Sequenzen von Gleitkommaoperationen allmählich an Präzision verlieren können. Das A und O der numerischen Analyse besteht darin, herauszufinden, welche Probleme dafür besonders anfällig sind, und clevere Möglichkeiten zu finden, die Reihenfolge 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. Theoretiker numerischer Zahlen verwenden häufig BigNum-Bibliotheken, und ihre Berechnungen dauern lange.

78

Was 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 (weil reelle Zahlen unzählig sind). 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 Realwerte auswählen, ähnlich wie dies bei Computeralgebra-Systemen (CAS) der Fall ist. Das Problem ist, dass es schnell unmöglich wird, wenn Ihr Ausdrucksbaum immer größer wird. Es ist auch sehr langsam: Versuchen Sie, ein großes System von Differentialgleichungen in Mathematica symbolisch zu lösen, und vergleichen Sie es mit einer anderen Gleitkomma-basierten Implementierung. 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 bei vielen Anwendungen nicht wirklich, da Sie Quadratwurzeln oder Cosinus oder Logarithmen usw. berechnen müssen. Darüber hinaus besteht die Tendenz, dass Rationalen immer komplexer werden und daher mehr Speicherplatz benötigen und Zeit für die Verarbeitung, wenn Sie mehr und mehr Berechnungen an ihnen durchführen.

  • Sie können auch Dezimalstellen mit beliebiger Genauigkeit verwenden, aber selbst etwas so Einfaches wie Division funktioniert nicht, da Sie unendlich oft wiederholte Ziffern erhalten. Sie können auch auf das Problem der zunehmenden Komplexität stoßen, wenn Sie rationaleren Zahlen ähnlicher sind, wenn auch in geringerem Maße.

Sie müssten also irgendwann Näherungswerte verwenden. In diesem Fall sind Gleitkommazahlen genau dort am besten geeignet. Gleitkommazahlen haben auch feste Breite (im Gegensatz zu allen anderen 3 zuvor erwähnten Datentypen), wodurch verhindert wird, dass die Komplexität zunimmt, wenn Sie mehr und mehr Berechnungen an ihnen durchführen.

30
Rufflewind

Ihre Aussage über Wissenschaft ist falsch, Ingenieurwesen und Naturwissenschaften außer Mathematik arbeiten nicht mit exakt präzisen Ergebnissen. Sie arbeiten mit einem Präzisionsfaktor, der in die Anzahl der angezeigten Ziffern integriert ist.

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

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

Nur zur Veranschaulichung, wenn Sie ein Maßband nehmen und Ihr Wohnzimmer messen. Obwohl Sie vielleicht feststellen, dass es 6 Meter und 25 Zentimeter breit ist, wissen Sie, dass Ihre Bandmessung nicht genau genug war, um etwas über die Millimeter- oder Nanometergenauigkeit zu sagen.

14
Pieter B

Beachten Sie, dass Gleitkommazahlen im Wesentlichen mit der Notation wissenschaftlich und technisch identisch sind, der Standardmethode für Menschen, Zahlen in Mathematik und Naturwissenschaften zu schreiben. In diesen Bereichen besteht kein großer Bedarf an extremer Präzision, aber es gibt oft einen großen Bereich.

Um ein zufälliges Beispiel aus meinen Physik-Hausaufgaben auszuwä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, soweit es mich interessiert. Aber ich kümmere mich um 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 mit sehr großen Zahlen speichern und arbeiten müssen. Daher speichern wir einen normalisierten Wert und einen Exponenten, der kleiner und schneller zu bearbeiten ist.

7
raptortech97

Gleitkommazahlen haben auch mehrere Eigenschaften, die sich gut zur Berechnung bestimmter Arten von wissenschaftlichen Ergebnissen eignen. Insbesondere ist die Genauigkeit genau wie in der wissenschaftlichen Notation umgekehrt proportional zur Größe, 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 gelesen werden, wenn Sie sich für so etwas interessieren), aber Kahans Artikel I. Denken Sie daran, die Gründe für viele der subtilen Designprobleme besser zu erklären.

Insbesondere Kahans Diatribe über Javas Implementierung von Gleitkomma ist zwar ziemlich entzündlich, macht aber einige gute Punkte darüber, warum IEEE-754-Semantik nützlich ist, und viel Lärm um nichts Vorzeichenbit untersucht die Gründe für die vorzeichenbehaftete Null in beträchtlicher Tiefe.

6
Daniel Pryden

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

Alle bisherigen Antworten verfehlen den wichtigsten Punkt: Wir können die genauen Werte der meisten Zahlen nicht berechnen. Als wichtigen Sonderfall können wir keine exakten Werte der Exponentialfunktion berechnen - um nur die wichtigste irrationale Funktion zu zitieren.

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 ist, dass exakte Arithmetik mit rationalen Zahlen funktioniert und dass:

  • Archimedes Zahl - 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 rationale Zahl ungleich Null x ist 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ücksfall. Die meisten Zahlen sind nicht rational (siehe Baires Theorem), daher bringt uns die Berechnung von Zahlen immer aus der rationalen Welt heraus.

Was ist das Berechnen und Darstellen einer 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 unsere Sleaves auf Fork Debian und entwickeln ein neues Repräsentationssystem für reelle Zahlen.

Wenn wir Zahlen berechnen wollen, müssen wir ein Repräsentationssystem für reelle Zahlen auswählen und wichtige Operationen daran beschreiben - d. H. Definieren, was Computing bedeutet. Da wir uns für wissenschaftliches Rechnen interessieren, möchten wir alle Dezimalzahlen (unsere Maße), ihre Quotienten (rationale Zahlen), Werte der Exponentialfunktionen und einige lustige Konstanten wie Archimedes Zahl genau darstellen.

Das Problem ist, dass die einzige Möglichkeit, Zahlen in einem solchen System perfekt darzustellen, darin besteht, eine symbolische Form zu verwenden, dh ü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 einfach beantworten.

Wenn Sie nach genaueren mathematischen Definitionen und Problemen suchen, suchen Sie beispielsweise nach rationalen Zahlen, transzendentalen Zahlen, besten Näherungen und dem Baire-Theorem.

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 angeben, können Sie mit Gleitkommazahlen stetige Größen modellieren.

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

0
Jan Doggen

Gleitkommazahlen bieten relative Genauigkeit: Sie können Zahlen darstellen, die höchstens einen kleinen Prozentsatz (wenn Sie etwa 0,0000000000001% pro Prozent nennen möchten) von einer genauen Zahl über einen weiten Bereich von Zahlen entfernt sind. Sie teilen dieses Merkmal mit einem Rechenschieber, obwohl letzterer nicht besser als eine dreistellige Genauigkeit wird. Dennoch war es völlig ausreichend, die statischen und dynamischen Kräfte großer Strukturen zu ermitteln, bevor digitale Computer dafür alltäglich wurden, und das liegt daran, dass die Materialkonstanten auch einige Variationen aufweisen und Konstrukte auswählen, die gegenüber Material- und Konstruktionsunterschieden einigermaßen harmlos sind um die maximalen Belastungen und Schwachstellen angemessen identifizierbar zu machen.

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

Nicht alles in Wissenschaft/Technik gehört in diese Kategorie. Wenn Sie beispielsweise 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 von völlig zufälligen nicht zu unterscheiden sind Lärm.

Selbst in diesen Bereichen kann man mit Gleitkommazahlen arbeiten (wie die Verwendung komplexer FFTs für die Faltung), wenn man die Anhäufung von Fehlern verfolgt und sicherstellt, dass die Gleitkommafehler nicht genügend Größe ansammeln, um möglicherweise sogar ein einzelnes Bit einzuschalten die tatsächlichen Entitäten, deren Annäherung sie sind. Für solche Näherungen wäre eine Festkomma-Verarbeitung wahrscheinlich geeigneter, aber Gleitkommaeinheiten im Feld bieten tendenziell einen schnelleren Betrieb und eine größere Anzahl verwendbarer Bits.

Auch Programmiersprachen wie C oder Fortran machen es überraschend schwierig, auf grundlegende Operationen wie Multiplikation und Division mit gemischter Genauigkeit oder ein Übertragsbit zum Addieren/Subtrahieren zuzugreifen, und dies sind grundlegende Bausteine, um über Ganzzahlen mit begrenzter Genauigkeit hinauszugehen.

Wenn Sie also Operationen Gleitkommazahlen zuordnen können, steht Ihnen heutzutage in der Regel eine relativ leistungsfähige Hardware zur Verfügung, und Sie können Ihre Algorithmen in einer der heutigen Allzweck-Programmiersprachen einigermaßen gut spezifizieren.

0
user153796

Ich denke, dies kann beantwortet werden, indem angesprochen wird, für welche Anwendung float/double Datentypen 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 Zahlen in darstellen die wahre Welt.

Ein Bereich, in dem Gleitkomma-Datentypen nicht verwendet werden sollten, ist der Bereich Finanzen *. Für das Kernsystem von z.B. Bei einer Bank wäre es völlig inakzeptabel, wenn aus einem Betrag, der 100000,01 USD hätte betragen sollen, plötzlich 100000,00 USD oder 100000,02 USD werden.

Ein solches Problem könnte leicht auftreten, wenn Schwimmer verwendet werden, insbesondere wenn die Zahl das Ergebnis einer oder mehrerer Berechnungen war, z. Berechnung der Summe aller Transaktionen auf einem Konto.

Technische und wissenschaftliche Berechnungen 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 häufig mit einer Anzahl von signifikante Ziffern. Am wichtigsten ist jedoch, dass sie eine genau definierte relative Genauigkeit haben, d. H. Sie haben die gleiche Anzahl signifikanter Ziffern, 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 wurden, und infolgedessen wurden Rundungsfehler eingeführt. Glücklicherweise war dieser spezielle Fehler überhaupt nicht kritisch, die Benutzer haben sich über Berechnungsfehler im Programm beschwert. Und dies führte zu einem anderen, weitaus schlimmeren Effekt: Die Benutzer verloren das Vertrauen in das System.

0
Pete