01/10/2018, 10:17

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.

Dark.Hades viết 12:25 ngày 01/10/2018

Đ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

rogp10 viết 12:22 ngày 01/10/2018

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

Dark.Hades viết 12:24 ngày 01/10/2018

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

rogp10 viết 12:23 ngày 01/10/2018

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

rogp10 viết 12:25 ngày 01/10/2018

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/

Vinh Nguyễn viết 12:24 ngày 01/10/2018

là sao hả pro

HK boy viết 12:29 ngày 01/10/2018

@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)
rogp10 viết 12:21 ngày 01/10/2018

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ó.

HK boy viết 12:23 ngày 01/10/2018

Bài này dùng số thực không sai (thớt sai)

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)

rogp10 viết 12:29 ngày 01/10/2018

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

Vinh Nguyễn viết 12:28 ngày 01/10/2018

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ó

HK boy viết 12:32 ngày 01/10/2018

Đú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.

Vinh Nguyễn viết 12:23 ngày 01/10/2018

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

Bài liên quan
0