Chỉ để giúp bạn quấn bộ não xung quanh câu trả lời, hãy để tôi cho bạn một sự tương tự đơn giản. Hãy nhớ rằng các số dấu phẩy động là gần đúng. Nhiều số không thể được biểu diễn chính xác. Bây giờ, hãy tưởng tượng chúng ta làm điều tương tự với số thập phân, nói rằng chúng ta sử dụng sáu chữ số sau dấu thập phân.
Làm cách nào để biểu thị 1/3? .333333
là điều tốt nhất chúng ta có thể làm. Nhưng bây giờ 3 * 1/3
sẽ không bằng 1.
Làm thế nào để chúng tôi đại diện cho 2/3? .666666
ít nhất sẽ đảm bảo 2 * 1/3 = 2/3
. Nhưng 2/3 + 1/3
sẽ không bằng 1.
Chúng tôi có thể đại diện 2/3 là .666667
. Nhưng sau đó 2 * 1/3
sẽ không bằng 2/3
. Nhưng ít nhất 1/3 + 2/3
sẽ bằng một.
Vì vậy, vấn đề là, với biểu diễn gần đúng, bạn không thể đảm bảo câu trả lời chính xác đúng, chỉ đóng đủ câu trả lời. Nói chung, bạn không bao giờ nên so sánh các số dấu chấm động cho sự bình đẳng trừ khi bạn là 100% tích cực bạn hiểu những gì bạn đang làm và tại sao.
Nguồn
2011-11-14 10:00:18
I ' đã thực hiện một số [sửa lỗi nhỏ] (http://programmers.stackexchange.com/posts/119596/revisions) trong mã của bạn, không có cách nào mã ban đầu của bạn hoạt động. Bạn đã thấy mã của bạn tạo ra đầu ra hay bạn vừa chép nó từ đâu đó? – yannis