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; }
Die Ausgabe dieses Codes wird falsch angezeigt:
9999 1000 99 10 1
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 }
Mit dieser Änderung wird die Ausgabe korrekt angezeigt:
10000 1000 100 10 1
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!