關於C語言pow的一個問題

今天在杭電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;
}

但這個具體原因,目前還不能完全弄明白,希望各位網友指點迷津。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章