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;
}
X viết 18:44 ngày 30/09/2018

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

Nguyễn Minh Dũng viết 18:42 ngày 30/09/2018

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

Khai báo lại

double chiSoMu = 4;

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

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 ạ?

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

X viết 18:32 ngày 30/09/2018

double chiSoMu = 4;

vẫn ra 9999

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 ạ?

đã 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 @@

Triệu Đức viết 18:33 ngày 30/09/2018

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à ạ

Triệu Đức viết 18:40 ngày 30/09/2018

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

X viết 18:36 ngày 30/09/2018

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)

bỏ luôn cả stdio.h với stdlib.h mà vẫn chạy là sao vậy trời

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

Triệu Đức viết 18:45 ngày 30/09/2018

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

ý 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 ạ

X viết 18:45 ngày 30/09/2018

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.

Triệu Đức viết 18:39 ngày 30/09/2018

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 ạ?

X viết 18:36 ngày 30/09/2018

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

viết 18:33 ngày 30/09/2018

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.

Bài liên quan
0