Tôi đã đọc rất nhiều câu trả lời nhưng dường như không ai giải thích chính xác từ " double" xuất phát từ đâu. Tôi nhớ một lời giải thích rất hay được đưa ra bởi một giáo sư đại học mà tôi đã có vài năm trước.
Nhắc lại phong cách trả lời của VonC, một biểu diễn dấu phẩy động chính xác duy nhất sử dụng một từ 32 bit.
- 1 bit cho dấu , S
- 8 bit cho số mũ , 'E'
- 24 bit cho phân số , còn được gọi là mantissa hoặc hệ số (mặc dù chỉ có 23 được biểu diễn). Chúng ta hãy gọi nó là 'M' (đối với mantissa , tôi thích tên này là "phân số" có thể bị hiểu nhầm).
Đại diện:
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
bits: 31 30 23 22 0
(Chỉ cần chỉ ra, bit dấu là cuối cùng, không phải đầu tiên.)
Một biểu diễn dấu phẩy động chính xác kép sử dụng một từ 64 bit.
- 1 bit cho dấu , S
- 11 bit cho số mũ , 'E'
- 53 bit cho phân số / mantissa / hệ số (mặc dù chỉ có 52 được đại diện), 'M'
Đại diện:
S EEEEEEEEEEE MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
bits: 63 62 52 51 0
Như bạn có thể nhận thấy, tôi đã viết rằng mantissa , trong cả hai loại, có thêm một chút thông tin so với đại diện của nó. Trong thực tế, mantissa là một số đại diện mà không có tất cả không có ý nghĩa của nó 0
. Ví dụ,
- 0,000124 trở thành 0,125 × 10 3
- 237.141 trở thành 0.237141 × 10 3
Điều này có nghĩa là bọ ngựa sẽ luôn ở dạng
0.α 1 α 2 ... α t × p
trong đó là cơ sở của đại diện. Nhưng vì phân số là số nhị phân, nên 1 1 sẽ luôn bằng 1, do đó phân số có thể được viết lại thành 1.α 2 α 3 ... α t + 1 × 2 p và 1 ban đầu có thể được giả định, nhường chỗ cho một bit thừa (α t + 1 ).
Bây giờ, rõ ràng là gấp đôi số 32 là 64, nhưng đó không phải là từ có nguồn gốc.
Độ chính xác cho biết số chữ số thập phân là chính xác , nghĩa là không có bất kỳ loại lỗi đại diện hoặc xấp xỉ nào. Nói cách khác, nó cho biết có bao nhiêu chữ số thập phân người ta có thể sử dụng một cách an toàn .
Như đã nói, thật dễ dàng để ước tính số chữ số thập phân có thể được sử dụng một cách an toàn:
- độ chính xác duy nhất : log 10 (2 24 ), có khoảng 7 ~ 8 chữ số thập phân
- độ chính xác kép : log 10 (2 53 ), có khoảng 15 ~ 16 chữ số thập phân