Quindi ero in un concorso di informatica e ho notato un bug strano. pow (26,2) restituirebbe sempre 675 e talvolta 674? anche se la risposta corretta è 676. Questi errori si verificano anche con pow (26,3), pow (26,4), ecc. Dopo aver effettuato il debug dopo il concorso, credo che la risposta abbia a che fare con il fatto che int annota. È interessante notare che questo tipo di errore non mi è mai accaduto prima. Il computer che avevo era in esecuzione mingw su Windows 8. La versione GCC era abbastanza nuova, come credo di 2-3 mesi. Ma quello che ho trovato è che se avessi girato la bandiera di ottimizzazione o1/o2/o3 su questo tipo di errore sarebbe miracolosamente scomparso. pow (26,2) otterrebbe sempre 676, ovvero la risposta corretta. Qualcuno può spiegare perché?GCC C++ precisione Pow
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout<<pow(26,2)<<endl;
cout<<int(pow(26,2))<<endl;
}
I risultati con i doppi sono strani.
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)' come in 26 * 26 = 676? –
sì, pow come nella funzione di potenza standard. –
Puoi pubblicare il tuo codice? Non sono sicuro di come otterresti questi valori. –