Heim > Backend-Entwicklung > C++ > Wie kann eine genaue Gleitkomma-Präzision in C sichergestellt werden?

Wie kann eine genaue Gleitkomma-Präzision in C sichergestellt werden?

Barbara Streisand
Freigeben: 2024-11-05 16:32:02
Original
519 Leute haben es durchsucht

How to Ensure Accurate Floating-Point Precision in C  ?

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;
Nach dem Login kopieren

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::digits10 bereit, wobei T der Typ der Gleitkommazahl ist. Diese Konstante stellt die maximale Anzahl signifikanter Ziffern dar, die genau dargestellt werden können.

So verwenden Sie std::numeric_limits::digits10, um die Genauigkeit richtig festzulegen:

<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>
Nach dem Login kopieren

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!

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