Hàm kiểm tra số chính phương bị sai

MInh mới chế được hàm KT số chính phương, mấy số kia ra đúng tự nhiên chui đâu ra số 2.

Điều kiện thế này là đủ rồi bạn

(sqrt(x) == (int)(sqrt(x)))

Thêm thư viện <math.h> vào cho an toàn

1 Like

Dòng đầu bạn lấy hai cái sqrt nhân nhau ra 1.9999… nên thành 1 => nhận luôn số 2 :slight_smile:

^ <cmath>
Mà phải có ép kiểu nếu ko sẽ bị ambiguous :slight_smile:

2 Likes

Chương trình mới nên bỏ x.h thay thành cx hả bác?

C++ mà, thay bằng dạng <cx> hết.

1 Like

Thư viện C++ có thêm overload nữa. Nếu dùng math.h thì để xài phiên bản float hay long phải gọi sqrtf() hay sqrtl(). https://developers.redhat.com/blog/2016/02/29/why-cstdlib-is-more-complicated-than-you-might-think/

1 Like

là sao hả pro

@Vinh_Nguyen4:

  • Trong C, <math.h> thì sang C++ thành <cmath>. Tương tự như vậy với các thư viện khác.
  • Hạn chế sử dụng số thực. Trong bài này không cần dùng số thực vì nếu dùng sẽ dễ bị sai số không cần thiết (như con số 2 vừa rồi)

Bài này dùng số thực không sai :slight_smile: (thớt sai) nhưng mà nếu lúc nào đó nghĩ đến log thì khoan dùng, trừ tính các biểu thức có nó.

Công nhận là thớt sai ạ. Ý em là bài này có thể dùng cách khác (nhưng chắc là thớt chưa học nên có lẽ thôi)

Đúng là có nhưng mà phải học số thực IEEE trước, và rất là ảo diệu.

1 Like

khi tui viết hàm sqrt nó báo tui là chỉ được dùng 4 cái kiểu là float double và gì gì đó, ko co kiểu int nên tui phai ép kiểu cho nó

Đúng rồi, sqrt chỉ thực hiện với các tham số thực.
Thử cách của @Dark.Hades xem.

cách của @Dark.Hades thì chạy ok

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