Heim > Backend-Entwicklung > C++ > Wie können wir Genauigkeitsprobleme in der Gleitkomma-Arithmetik überwinden?

Wie können wir Genauigkeitsprobleme in der Gleitkomma-Arithmetik überwinden?

Linda Hamilton
Freigeben: 2024-12-01 00:22:15
Original
773 Leute haben es durchsucht

How Can We Overcome Accuracy Issues in Floating-Point Arithmetic?

Überwindung von Genauigkeitsproblemen bei Gleitkommazahlen

Gleitkommazahlen, ein in der Informatik weit verbreiteter Datentyp, stellen potenzielle Genauigkeitsprobleme dar zu ihrer intrinsischen Darstellung in der Maschine. Um dieses Problem zu veranschaulichen:

#include <stdio.h>
#include <stdlib.h>

int main() {
  char *str = "4.600";
  double mw = atof(str);
  float p = 0.2;
  float g = 0.2;
  int h = 1;

  int columns = (int)((mw - (h * 11 * p)) / ((h * 11 * p) + g)) + 1;
  printf("%f\n", (mw - (h * 11 * p)) / ((h * 11 * p) + g));
  printf("Columns: %d\n", columns);

  return 0;
}
Nach dem Login kopieren

In diesem Code ist str eine String-Darstellung von „4.600“, und der Aufruf von atof(str) wandelt sie in ein doppeltes MW um. Die nachfolgenden Berechnungen ergeben ein unglückliches Ergebnis: Die Gleitkommadarstellung von 4,5999999999999996 kann den gewünschten Wert von 4,600 nicht genau darstellen.

Lösung des Problems

Wie in der Lösung hervorgehoben ist es praktisch unmöglich, mit der Gleitkomma-Arithmetik eine exakte Gleichheit zu erreichen. Stattdessen ist es vorzuziehen, Werte innerhalb eines akzeptablen Bereichs zu vergleichen. In bestimmten Szenarien ist es wichtig zu erkennen, dass bestimmte Werte nicht genau als Gleitkommazahlen dargestellt werden können.

Empfohlene Ressourcen

Weitere Einblicke finden Sie in den folgenden Referenzen:

  • [Was jeder Informatiker über Gleitkomma wissen sollte Arithmetik](https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)
  • [Gleitkommazahlen vergleichen](https://floating-point-gui. de/)

Das obige ist der detaillierte Inhalt vonWie können wir Genauigkeitsprobleme in der Gleitkomma-Arithmetik überwinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage