Hỏi đáp

Chia sẻ kiến thức, cùng nhau phát triển

Tại sao không thể lưu chính xác 1 số kiểu float vào máy tính.

7 năm trước 858 lượt xem 2 bình luận 7 năm trước

Em có đoạn code:
 

Khi in ra được x = 33554432.0000 nhưng xét x == 33554433 (int) thì lại ra True.
Tại sao máy lại không lưu được chính xác giá trị trên và sao lại là True. Em cảm ơn.

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
DG SuperAdmin, Author, KquizAdmin, KquizAuthor đã bình luận 7 năm trước

độ chính xác của float là 7 chữ số, nên những số sau đó sẽ bị làm tròn (xem bài số chấm động).

  • => 33554433.0 thành 33554432.0
  • x == 33554433 là true vì so sánh float và int thì int sẽ tự chuyển thành float (xem bài Độ ưu tiên toán tử). Nếu muốn thử thì e chuyển thành (int)x == 33554433 thì kết quả sẽ là false.

Lời khuyên là nên xài double thay vì float, kết quả sẽ khác.

 

Câu hỏi mới nhất