今天在杭電oj上做題的時候,發現一個關於pow的問題,測試代碼如下:
#include <stdio.h>
using namespace std;
int main()
{
int num = 0;
int index = 0;
int i = 0;
int a = 0, b = 0;
int m = 0, n = 0;
a = 2;
b = 5;
m = 1;
int value = 0;
int value1 = pow(a, 2);
double value2 = pow(b, 2);
int value3 = (int )pow(b, 2);
printf("value2:%lf\n", value2);
cout<<"value3:"<<value3<<endl;
return 0;
}
程序運行輸出結果:
最終分析覺得:pow的返回值爲double,如果直接強轉int類型,會導致數據運算過程中丟失精度,導致輸出結果爲24.
可改寫成如下代碼:
#include <stdio.h>
using namespace std;
int main()
{
int num = 0;
int index = 0;
int i = 0;
int a = 0, b = 0;
int m = 0, n = 0;
a = 2;
b = 5;
m = 1;
int value = 0;
int value1 = pow(a, 2);
double value2 = pow(b, 2);
int value3 = (int )value2;
printf("value2:%lf\n", value2);
cout<<"value3:"<<value3<<endl;
return 0;
}
但這個具體原因,目前還不能完全弄明白,希望各位網友指點迷津。