Nếu bạn làm các tính toán bằng tay trong nhị phân đúp chính xác, đó là hạn chế đến 53 bit có ý nghĩa, bạn sẽ thấy những gì đang xảy ra:
129,95 = 1,0000001111100110011001100110011001100110011001100110 x 2^7
129,95 * 100 = 1.1001011000010111111111111111111111111111111111111111011 x 2^13
này dài 56 bit có ý nghĩa, vì vậy làm tròn lên 53 bit nó
1,10010110000101111111111111111111111111111111111111 11 x 2^13, bằng với
12994,999999999998181010596454143524169921875
Bây giờ 129,95 * 10 = 1.01000100110111111111111111111111111111111111111111111 x 2^10
Đây là 54 bit có ý nghĩa dài, do đó làm tròn lên 53 bit đó là 1,01000100111 x 2^10 = 1299.5
Bây giờ 1299.5 * 10 = 1.1001011000011 x 2^13 = 12995.
Nguồn
2010-10-30 01:56:09
Rất có thể do biểu thị nhị phân của số dấu phẩy động. Bạn không thể viết chính xác 129,95 trong cơ sở 2 tôi giả định. –
Liên kết bắt buộc: [Điều mà mỗi nhà khoa học máy tính cần biết về số học dấu chấm động] (http://docs.sun.com/source/806-3568/ncg_goldberg.html) –
Bất kỳ manh mối nào tại sao điều này sẽ KHÔNG xảy ra cho tôi? Tôi đang cố gắng để chứng minh điều này, và tôi nhập 129,95 * 100 như trên vào IRB và tôi bất ngờ nhận được câu trả lời đúng. – Joel