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á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

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

2 Likes

bác nói rõ cho e đk không

1 Like

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 :smiley:
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)

3 Likes

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

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