Heim > Backend-Entwicklung > C++ > Warum gibt „pow(10, 5)' in C manchmal 9999 statt 10000 zurück?

Warum gibt „pow(10, 5)' in C manchmal 9999 statt 10000 zurück?

Patricia Arquette
Freigeben: 2024-12-27 21:07:16
Original
194 Leute haben es durchsucht

Why Does `pow(10, 5)` Sometimes Return 9999 Instead of 10000 in C  ?

Warum pow(10,5) in C 9.999 statt 10.000 anzeigt

In C, wenn die Funktion pow() mit Ganzzahl verwendet wird Bei Eingaben und Gleitkomma-Exponenten kann es aufgrund der Darstellung von Gleitkommawerten zu unerwarteten Ergebnissen kommen. Insbesondere kann pow(10.0, 5) zu einem Wert von 9999,9999999 oder ähnlichem führen. Wenn dieser Gleitkommawert einer Ganzzahlvariablen zugewiesen wird, wird er abgeschnitten.

Bedenken Sie beispielsweise den folgenden Codeausschnitt:

const int sections = 10;

for(int t = 0; t < 5; t++){
   int i = pow(sections, 5- t -1);  // <-- pow() with integer base, floating-point exponent
   cout << i << endl;
}
Nach dem Login kopieren

Die Ausgabe dieses Codes wird falsch angezeigt:

9999
1000
99
10
1
Nach dem Login kopieren

Wenn der Code jedoch geändert wird, um die pow()-Funktion direkt in der cout-Anweisung zu verwenden, sind die erwarteten Ergebnisse erhalten:

for(int t = 0; t < 5; t++){
    cout << pow(sections,5-t-1) << endl; // <-- pow() used directly in cout
}
Nach dem Login kopieren

Mit dieser Änderung wird die Ausgabe korrekt angezeigt:

10000
1000
100
10
1
Nach dem Login kopieren

Diese Diskrepanz tritt auf, weil im ersten Beispiel das Gleitkommaergebnis von pow(sections, 5 - t -1) wird gekürzt, wenn es einer ganzzahligen Variablen zugewiesen wird. Im zweiten Beispiel wird das Gleitkomma-Ergebnis jedoch gerundet, wenn es direkt an cout übergeben wird, was zu einer korrekten Anzeige führt.

Das obige ist der detaillierte Inhalt vonWarum gibt „pow(10, 5)' in C manchmal 9999 statt 10000 zurück?. 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