Bộ chuyển đổi số thực IEEE 754 là gì?
Công cụ này giải mã một giá trị thập lục phân (hex) 32-bit thành con số thực mà nó biểu diễn theo chuẩn IEEE 754 đơn chính xác — định dạng được dùng cho kiểu float trong C, Java và hầu hết các phần cứng hiện đại. Bạn chỉ cần nhập tám chữ số hex, và bộ chuyển đổi sẽ tách chúng thành ba trường tạo nên một số float: 1 bit dấu, 8 bit số mũ và 23 bit phần định trị (mantissa), rồi ghép lại thành giá trị thập phân.
Cách sử dụng
Nhập giá trị 32-bit dưới dạng hex (ví dụ 40490FDB). Tiền tố "0x" có thể có hoặc không, và mọi ký tự không phải hex đều được bỏ qua. Nếu giá trị ngắn hơn 8 chữ số, hệ thống sẽ tự thêm số 0 vào bên trái. Kết quả hiển thị giá trị thập phân cùng với dấu, số mũ lưu trữ, số mũ không lệch (unbiased) và phần định trị đã giải mã, để bạn tự kiểm tra lại cách bố trí các bit.
Giải thích công thức
Đối với số bình thường (normal), giá trị được tính theo công thức
$$\text{Value} = (-1)^{s} \times \left(1 + \frac{m}{2^{23}}\right) \times 2^{(e - 127)}$$Con số 127 chính là độ lệch số mũ (bias) của định dạng đơn chính xác. Phần "1 +" thể hiện bit dẫn đầu ngầm định mà mọi số nhị phân chuẩn hóa luôn có. Khi số mũ lưu trữ e bằng 0, số đó là số dưới chuẩn (subnormal): bit 1 dẫn đầu ngầm định biến mất và số mũ bị cố định ở \(-126\). Khi e bằng 255, giá trị là vô cực (nếu mantissa bằng 0) hoặc NaN.
Ví dụ minh họa
Lấy giá trị 40490FDB làm ví dụ. Ở dạng nhị phân, bit dấu là 0 (số dương), trường số mũ là 10000000 = 128, vậy số mũ không lệch là \(128 - 127 = 1\). Các bit phần định trị bằng 4788187, cho ra phân số \(4788187/8388608 \approx 0{,}5707964\). Giá trị cuối cùng là \((1 + 0{,}5707964) \times 2^{1} \approx 3{,}14159274\) — chính là giá trị xấp xỉ π gần nhất mà số đơn chính xác có thể biểu diễn.
Câu hỏi thường gặp
Tại sao kết quả không đúng chính xác con số tôi mong đợi? Định dạng đơn chính xác chỉ có độ chính xác khoảng 7 chữ số thập phân, nên nhiều giá trị thập phân buộc phải làm tròn về số float biểu diễn được gần nhất.
Còn số chính xác kép (double, 64-bit) thì sao? Công cụ này xử lý số đơn chính xác 32-bit. Số double dùng 11 bit số mũ, 52 bit phần định trị và độ lệch là 1023.
Giá trị 7FC00000 cho ra kết quả gì? Đó là một NaN (số mũ toàn bit 1, phần định trị khác 0), tức là không phải một số hữu hạn.