Heim >Backend-Entwicklung >C++ >Wie kann eine genaue Gleitkomma-Präzision in C sichergestellt werden?
Gleitkomma-Präzision in C
Beim Umgang mit Gleitkommazahlen in C ist es wichtig, deren Präzisionsbeschränkungen zu verstehen. Betrachten Sie den folgenden Code:
<code class="cpp">double a = 0.3; std::cout.precision(20); std::cout << a << std::endl;
Das Ergebnis ist 0,2999999999999999889 statt 0,3, was auf einen Präzisionsverlust hinweist. Um dies zu beheben, stellt C die Konstante std::numeric_limits So verwenden Sie std::numeric_limits Dieser Code legt die Genauigkeit auf die maximale Anzahl signifikanter Ziffern fest, die durch ein Double genau dargestellt werden können. Infolgedessen beträgt die Ausgabe in beiden Fällen 0,3. Es ist jedoch wichtig zu beachten, dass auch bei diesem Ansatz akkumulierte Fehler auftreten können, wenn die Schleife deutlich mehr als 50 Mal iteriert. Dies liegt daran, dass Gleitkommazahlen eine Näherung darstellen und sich über eine Reihe von Operationen hinweg Fehler ansammeln können. Um solche Situationen zu bewältigen, wird empfohlen, Bibliotheken zu verwenden, die Arithmetik mit beliebiger Genauigkeit bereitstellen, wie z. B. Boost.Multiprecision. Das obige ist der detaillierte Inhalt vonWie kann eine genaue Gleitkomma-Präzision in C sichergestellt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!<code class="cpp">#include <iostream>
#include <limits>
int main()
{
double a = 0.3;
std::cout.precision(std::numeric_limits<double>::digits10);
std::cout << a << std::endl;
double b = 0;
for (char i = 1; i <= 50; i++) {
b = b + a;
};
std::cout.precision(std::numeric_limits<double>::digits10);
std::cout << b << std::endl;
}</code>