các bác cho e hỏi tại sao khi mình viết 0.3+0.3+0.3 các ngôn ngữ lập trình đều ra kết quả là 0.89999999999
Tại sao 0.3+0.3+0.3 các ngôn ngữ lập trình đều ra kết quả là 0.89999999999?
Cái này bạn nên tham khảo kiến thức căn bản về cách máy tính lưu dữ liệu nhé, nhất là floating point numbers
bác nói rõ cho e đk không
Vì đơn giản là 0.3 ko thể biểu diễn chính xác trong hệ nhị phân (giới hạn).
Phần nguyên ta chia đôi (tổng quát: chia b
) thì phần thập phân lại phải nhân đôi. VD như 0.316 = 4.8, 0.816 = 12.8; vậy 0.3 = 0.4CCCCC… hex. Điều này không có gì lạ nếu để ý rằng 0.3 = 3/10.
Vả lại 0xC = 12 = 0b1100 nên sẽ bị mẻ (do phần lẻ chỉ được 23 bit).
colgate: 0.1 = 0.199999… hex (còn xa 0.2 hex = 1/8 nha), mà 0.19A * 3 = 0.4CE
0.9 = 0.E666…, 4CC * 3 = (500 - 34) * 3 = F00 - 9C = E64 < E66. Lí do là vì C = 1100 (bin).
dự đoán 0.1 * 3 > 0.3 và 0.3 * 3 < 0.9 (IEEE-754)
Đọc lý thuyết về biểu diễn số thực trên máy tính là rõ ngay. Cái này gần như ai cũng từng kinh qua khi học nhập môn về IT/ CNTT.