Ví dụ như nhập 1 số có kiểu float là a = 999999999.0 và kiểm tra bằng lệnh If ( a==999999999.0) thì giá trị trả về là 2 số khác nhau. Lí do của việc đó có phải là do phần thập phân phía sau bị sai khác?
Ai giải thích hộ phần này với
Ví dụ như nhập 1 số có kiểu float là a = 999999999.0 và kiểm tra bằng lệnh If ( a==999999999.0) thì giá trị trả về là 2 số khác nhau. Lí do của việc đó có phải là do phần thập phân phía sau bị sai khác?
Ai giải thích hộ phần này với
Đúng. Lí do ở đây:
Kết luận: Đừng so sánh trực tiếp 2 số thực.
Có định lượng đàng hoàng.
Dễ đọc hơn:
999999999.0 là double thì so với float không thể nào bằng :v nhưng nguyên nhân xa là do vượt quá số chữ số.
à cho mình hỏi thêm cách để biểu diễn chính xác 1 số dạng float hay double được không? làm sao để xuất ra số đó là .0000000000000000xxx và cách máy cấp phát bộ nhớ cho nó như thế nào?
Trong link có hết mà bạn.
Cái này thì cậu có thể dùng 1 biến eps cực nhỏ :v