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:
double a = 0.3;
std::cout.precision(20);
std::cout 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:
#include
#include
int main()
{
double a = 0.3;
std::cout.precision(std::numeric_limits::digits10);
std::cout ::digits10);
std::cout 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.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3