thắc mắc về hàm pow

Tại sao 2 code này cho 2 giá trị a khác nhau ạ? Cái đầu cho ra 9999, cái sau mới ra đúng 10000 :confused:
Mà với cả tại sao em không include thư viện math.h vào mà vẫn dùng được hàm pow vậy ạ?

‪#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a, chiSoMu = 4;
    a = pow(10, chiSoMu);
    printf("chiSoMu = %d\n", chiSoMu);
    printf("a = %d\n", a);
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a, chiSoMu = 4;
    a = pow(10, 4);
    printf("chiSoMu = %d\n", chiSoMu);
    printf("a = %d\n", a);
    return 0;
}

vấn đề làm tròn số khi chuyển từ double sang int @@

Khai báo lại

double chiSoMu = 4;

Rồi chạy lại thử xem

Thử bỏ stdlib.h đi xem còn chạy được không.


P/S: Đang làm video python, ngại mở IDE ra test quá :frowning: @david15894 test dùm phát

vẫn ra 9999

đã test trên codeblock thì báo lỗi thiếu thư viện, k biết bạn dùng IDE nào mà siêu vậy @@

-Em cũng chả biết được@@ hình như em down trên trang chủ của codeblock mà :expressionless: chứ em chưa cài thêm cái gì vào cả :expressionless:
-Mà sao em bỏ luôn cả stdio.h với stdlib.h mà vẫn chạy là sao vậy trời :expressionless: Em nhớ là printf với scanf là thuộc stdio.h mà ạ :expressionless:

là sao hả anh? em có dùng double gì đâu? em dùng mỗi int mà :confused:

vd:

double x = 10/6; // 1.6666666

(int)x sẽ bằng 1 thay vì 1.666666 (double sang int sẽ làm tròn xuống)
…và tự suy ngẫm lại ở hàm pow nha :)) // pow(double, double)

codeblock “lên đồng” :)))

1 Like

ý anh là nó làm tròn ấy ạ :confused: Nhưng mà em dùng số nguyên rồi thì làm tròn gì nữa ạ :confused:

a nhớ không rõ vụ này. :)) cơ mà khi biểu diễn số double nó sẽ có phần… luxubu phía sau :)) 10000 bị mất đi còn 9999.99999999…, vì vậy làm tròn xuống sẽ còn 9999. giải thích vậy cho nhanh.

1 Like

thế giờ làm thế nào để không bị sai ạ? Chả lẽ lại viết 1 hàm con tính lũy thừa, khi nào muốn dùng thì add vào project ạ?

a = pow(double, double) thì bn gán aint làm gì :)) sẽ có sai số.
hàm pow trả về 1 giá trị double. 10^4 sẽ ra 9999.999999. chứ k phải 10000. khi bạn ép kết quả a về int thì nó sẽ tự động làm tròn xuống. => 9999

cho a sang double chắc là được

Nên sử dụng powf nếu biến là int, còn khi sử dụng pow thì kết quả sẽ ra như @david15894 trình bày.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?