Heim >Backend-Entwicklung >C++ >Warum treten bei meiner C-Wahrscheinlichkeitsberechnung Gleitkommafehler auf?

Warum treten bei meiner C-Wahrscheinlichkeitsberechnung Gleitkommafehler auf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-09 17:19:02982Durchsuche

Why Does My C   Probability Calculation Incur Floating Point Errors?

Gleitkommafehler anhand eines einfachen C-Beispiels verstehen

Im Bereich der Programmierung können Gleitkommavariablen aufgrund ihrer endlichen Präzision Fehler verursachen . Dieses als Gleitkommafehler bekannte Phänomen kann bei der Durchführung mathematischer Operationen mit solchen Variablen auftreten.

Betrachten Sie den folgenden C-Codeausschnitt, der versucht, die Wahrscheinlichkeit von genau zwei Erfolgen in einer Folge von 10 unabhängigen Ereignissen zu berechnen: wobei jedes Ereignis eine Erfolgswahrscheinlichkeit „p“ hat:

double p_2x_success = pow(1-p, (double)8) * pow(p, (double)2) * (double)choose(8, 2);

Die Variablen „pow()“ und „choose()“ stellen mathematische Funktionen dar.

Nun untersuchen wir, ob dies der Fall ist Der Code weist potenzielle Gleitkommafehler auf. Wenn der Wert von „k“ in der obigen Gleichung zunimmt, wird die Größe der Terme „pow(1-p, k)“ und „choose(k, 2)“ sehr groß. Dies kann zu einer Anhäufung von Gleitkommafehlern führen, da diese Operationen für immer größere Zahlen ausgeführt werden.

Um dies zu veranschaulichen, lassen Sie uns die Gleichung „f(k)“ grafisch darstellen:

f(k) = pow(1-p, k) * pow(p, k) * choose(k, 2)

wobei sowohl „X“ als auch „Y“ logarithmisch skaliert sind.

Für einen Computer mit 32-Bit-Gleitkommadarstellung würden wir erwarten, dass „f(k)“ für alle Werte von „k“ Null ist '. Aufgrund von Gleitkommafehlern nimmt der Fehler jedoch mit größeren „k“-Werten deutlich zu. Dies geht aus dem unten gezeigten Diagramm hervor:

[Bild des XY-Diagramms mit logarithmischer Skala]

In diesem Diagramm stellt die X-Achse „k“ und die Y-Achse das dar absoluter Wert des Fehlers. Mit zunehmendem „k“ wird die Fehlerakkumulation ausgeprägter.

Daher ist der bereitgestellte Codeausschnitt tatsächlich anfällig für Gleitkommafehler aufgrund der Häufung von Rundungsfehlern bei der Berechnung von Wahrscheinlichkeiten.

Das obige ist der detaillierte Inhalt vonWarum treten bei meiner C-Wahrscheinlichkeitsberechnung Gleitkommafehler auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn