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.
Hàm kiểm tra số chính phương bị sai
Đ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
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
^ <cmath>
Mà phải có ép kiểu nếu ko sẽ bị ambiguous
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.
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/
là sao hả pro
…
- 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 (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.
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ó