30/09/2018, 16:30
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
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
", chiSoMu);
printf("a = %d
", a);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, chiSoMu = 4;
a = pow(10, 4);
printf("chiSoMu = %d
", chiSoMu);
printf("a = %d
", a);
return 0;
}
Bài liên quan
vấn đề làm tròn số khi chuyển từ double sang int @@
Khai báo lại
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á @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à chứ em chưa cài thêm cái gì vào cả
-Mà sao em bỏ luôn cả stdio.h với stdlib.h mà vẫn chạy là sao vậy trời Em nhớ là printf với scanf là thuộc stdio.h mà ạ
là sao hả anh? em có dùng double gì đâu? em dùng mỗi int mà
vd:
(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” :)))
ý anh là nó làm tròn ấy ạ Nhưng mà em dùng số nguyên rồi thì làm tròn gì nữa ạ
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.
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 a là int 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.