01/10/2018, 14:02

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

Nguyễn Quốc Thái viết 16:05 ngày 01/10/2018

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

Tran Luan viết 16:07 ngày 01/10/2018

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

rogp10 viết 16:17 ngày 01/10/2018

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)

Vô Thin viết 16:08 ngày 01/10/2018

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

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

Đào An viết 16:11 ngày 01/10/2018

0.3+0.3+0.3

kipalog.com

Vì sao 0.1 + 0.1 + 0.1 không bằng 0.3?

Nếu có thể trả lời chính xác câu hỏi sau và giải thích tại sao, bạn có thể bỏ qua bài này: 0.1 + 0.1 + 0.1 == 0.3 Trong Python, biểu thức này t...

Bài liên quan
0