Ich war also bei einem Computerwettbewerb und habe einen seltsamen Fehler bemerkt. pow(26,2) würde immer 675 und manchmal 674 zurückgeben? obwohl die richtige Antwort 676 ist. Diese Art von Fehlern treten auch bei pow (26,3), pow (26,4) usw. auf. Nach einigem Debuggen nach dem Wettbewerb glaube ich, dass die Antwort mit der Tatsache zu tun hat, dass int abrundet. Interessanterweise ist mir diese Art von Fehler noch nie aufgetreten. Auf dem Computer, den ich hatte, lief mingw unter Windows 8. Die GCC-Version war ziemlich neu, etwa 2-3 Monate alt, glaube ich. Aber ich fand heraus, dass diese Art von Fehler auf wundersame Weise verschwinden würde, wenn ich das o1/o2/o3-Optimierungs-Flag aktivieren würde. pow(26,2) würde immer 676 aka richtige Antwort erhalten Kann jemand erklären warum?
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout<<pow(26,2)<<endl;
cout<<int(pow(26,2))<<endl;
}
Ergebnisse mit Doubles sind seltsam.
double a=26;
double b=2;
cout<<int(pow(a,b))<<endl; #outputs 675
cout<<int(pow(26.0,2.0))<<endl; # outputs 676
cout<<int(pow(26*1.00,2*1.00))<<endl; # outputs 676
pow(26,2)
wie in 26 * 26 = 676?– Alexei Levenkov
8. Dezember 2012 um 6:01 Uhr
ja, pow wie in der Standard-Power-Funktion.
– Michael Chen
8. Dezember 2012 um 6:02 Uhr
Bitte überprüfen Sie den Code erneut und korrigieren Sie ihn mit den korrekten falschen Zahlen.
– cxxl
8. Dezember 2012 um 7:14 Uhr
Mögliches Duplikat von C: Ich habe unterschiedliche Ergebnisse mit pow(10,2) und pow(10,j), j=2;
– phuklv
9. April 2019 um 8:24 Uhr
Warum gibt der gcc-Compiler pow(10,2) als 99 und nicht als 100 aus?, Warum pow(10,5) = 9.999 in C++
– phuklv
9. April 2019 um 8:25 Uhr