GCC C ++ Pow точность
Итак, я участвовал в компьютерном конкурсе и заметил странную ошибку. Pow (26,2) всегда будет возвращать 675, а иногда 674? хотя правильный ответ - 676. Подобного рода ошибки также случаются с pow (26,3), pow (26,4) и т. д. После некоторой отладки после конкурса я считаю, что ответ связан с тем, что int округляется. Интересно, что такого рода ошибки никогда не случались со мной раньше. Компьютер, на котором у меня был mingw на Windows 8. Версия GCC была довольно новой, как мне кажется, 2-3 месяца назад. Но я обнаружил, что, если я включу флаг оптимизации o1 / o2 / o3, ошибки такого рода чудесным образом исчезнут. Pow (26,2) всегда получит 676 или правильный ответ Может кто-нибудь объяснить, почему?
#include <cmath>
#include <iostream>
using namespace std;
int main() {
cout<<pow(26,2)<<endl;
cout<<int(pow(26,2))<<endl;
}
Результаты с удвоениями странные.
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