Thắc mắc về so sánh dữ liệu kiểu double

Mọi người cho em hỏi vì sao giá trị của a = 5;
khi em đưa về floor, int,… của a rồi so sánh thì em nghĩ điều kiện sẽ đúng. nhưng chương trình lại trả về sai, mọi người giải thích giúp em với ạ, em cảm ơn nhiều :D.
image

  1. Thử in cả 2 giá trị xem chúng có bằng nhau không.
  2. Thao tác với số thực thì dùng phép toán so sánh == là không nên, nó chả mấy khi đúng đâu.
2 Likes

hàm pow(x, y) nếu y ko phải là số nguyên thì kết quả trả về ko chính xác 100%.

thay vì dùng hàm floor(a) dùng round(a). Kết quả trả về có thể là 4.99999 hoặc 5.00001, round nó làm tròn về 5.0 hết, còn floor thì 4 hoặc 5.

à muốn ktra số trả về có là số nguyên ko thì :V trước tiên làm tròn về số nguyên bằng lround hoặc llround: int i = lround(a) rồi kiểm tra i * i * i == k ban đầu :V

C++ có hàm cbrt(x) để lấy căn bậc 3, chính xác hơn tí nhưng vẫn ko bảo đảm căn bậc ba của số mũ 3 là số nguyên :V Căn bậc 2 sqrt(x) thì bảo đảm căn số bình phương là chính xác kết quả số nguyên. ( std::sqrt is required by the IEEE standard to be exact)

7 Likes

Dạ vâng em cảm ơn 2 anh :DDDD

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