Một chương trình thú vị với hàm lũy thừa pow

Bạn mình chạy chương trình này trên Dev-C và CodeBlock trên Windows ra kết quả là 224 (thay vì kết quả đúng là: 255).

Chương trình này có một số điều thú vị:

Nếu bạn thay sum=sum+pow(i,3) bằng:

//sum = sum + trunc(pow(i, 3));
//sum = sum + round(pow(i, 3));
double anhyeuem = pow(i, 3);
//sum = sum + anhyeuem;
//sum = sum + int(anhyeuem);

thì nó ra kết quả đúng (255). Hehe.

Ngược lại: nếu giữ nguyên hoặc thay sum=sum+pow(i,3) bằng:

//sum = sum + int(pow(i, 3));

thì nó lại ra kết quả sai (224).

Đọc toàn bộ kĩ code của chương trình, bạn sẽ hiểu tại sao nó lại như thế. Và mình hiểu, sau đó bạn sẽ lẫn lộn, thậm chí là không còn tin tưởng vào bản thân nữa vì không tìm ra cách giải thích hợp lý cho toàn bộ vấn đề trên :v

#include <iostream>
#include <math.h>
#include <stdio.h>

using namespace std;

int main()
{
    int n;
    int sum=0;
    //cin>>n;
    n = 5;
    for(int i=1;i<=n;++i)
    {
        sum=sum+pow(i,3);
        //sum = sum + int(pow(i, 3));
        //sum = sum + trunc(pow(i, 3));
        //sum = sum + round(pow(i, 3));
        double anhyeuem = pow(i, 3);
        //sum = sum + anhyeuem;
        //sum = sum + int(anhyeuem);
        int k = (int) anhyeuem;
        cout <<i<<"^3 = " <<anhyeuem<<"   (1)"<<endl;
        cout <<i<<"^3 = " <<k<<"   (2)"<<endl;
        printf("%d^3 = %0.16lf   (3)\n", i, anhyeuem);

        if (anhyeuem == 124.999999999999995) cout << "\n\n\nhahaha1" << endl;
        if (anhyeuem == 124.999999999999997) cout << "hahaha2" << endl;
        if (anhyeuem == 125) cout << "hahaha3" << endl;

        double anhyeuem2 = 124.999999999999995;
        if (anhyeuem == 125) cout << anhyeuem2<<endl;
        if (anhyeuem == 125) printf("%0.16lf\n", anhyeuem2);

        cout << "Current total: " << sum << endl << endl;
    }
    cout << "\n---------------------\n";
    cout << "1^3 = " << pow(1,3) << endl;
    cout << "2^3 = " << pow(2,3) << endl;
    cout << "3^3 = " << pow(3,3) << endl;
    cout << "4^3 = " << pow(4,3) << endl;
    cout << "5^3 = " << pow(5,3) << endl;
    cout << "\n---------------------\n";
    cout << "Sum = " << sum << endl;

    return 0;
}

5 Responses to “Một chương trình thú vị với hàm lũy thừa pow”

  1. nguyenvanquan7826 Says:

    Em chạy nó vẫn ra 125 đúng mà anh. Dù chạy theo dòng nào trong các dòng này đều đúng cả…
    //sum=sum+pow(i,3);
    //sum = sum + int(pow(i, 3));
    //sum = sum + trunc(pow(i, 3));
    //sum = sum + round(pow(i, 3));
    sum = sum + anhyeuem;
    sum = sum + int(anhyeuem);
    int k = (int) anhyeuem;


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: