Więc byłem w konkursie komputerowym i zauważyłem dziwny błąd. pow (26,2) zawsze zwróci 675, a czasami 674? mimo że poprawna odpowiedź to 676. Tego rodzaju błędy występują również przy pow (26,3), pow (26,4) itd. Po pewnym debugowaniu po zawodach sądzę, że odpowiedź ma związek z faktem, że rundy są mniejsze. Co ciekawe, tego rodzaju błąd nigdy wcześniej mi się nie zdarzył. Komputer, który miałem uruchomił mingw na Windows 8. Wersja GCC była całkiem nowa, jak sądzę, 2-3 miesiące. Ale odkryłem, że jeśli zmienię flagę optymalizacji o1/o2/o3 na tego rodzaju błąd, to cudem zniknę. pow (26,2) zawsze dostanie 676 aka poprawnej odpowiedzi Czy ktokolwiek może wyjaśnić dlaczego?GCC C++ pow dokładność
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout<<pow(26,2)<<endl;
cout<<int(pow(26,2))<<endl;
}
Wyniki z gry podwójnej są dziwne.
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)' jak w 26 * 26 = 676? –
tak, pow jak w standardowej funkcji zasilania. –
Czy możesz opublikować swój kod? Nie jestem pewien, w jaki sposób zdobędziesz te wartości. –