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
Barbara StreisandOriginal
2024-11-05 16:32:02476Durchsuche

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;

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>

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!

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