Search…

Chuyển Đổi Số Thực Sang Nhị Phân Theo Chuẩn IEEE 754

13/07/20204 min read
Tìm hiểu về cách lưu trữ số thực trong hệ nhị phân theo tiêu chuẩn IEEE 754.

Chuyển đổi số nguyên từ thập phân sang nhị phân có lẽ không còn xa lại gì đối với chúng ta. Thế nhưng một ngày nào nó bạn gặp phải chuyển đổi một số thực sang hệ nhị phân, nhưng xung quanh bạn không có bất kỳ một công cụ nào để hỗ trợ. Bài viết này sẽ cung cấp cho các bạn những kiến thức cần thiết để làm được điều đó chỉ trong vài bước đơn giản. Trong quá trình nghiên cứu của mình, nhiều lúc tôi phải làm việc với những công cụ đơn giản như là giấy, viết, máy tính… và những công cụ này không hỗ trợ những chức năng mạnh để giải quyết những bài toán khó.

Biểu diễn số thực trong máy tính

Như các bạn đã biết, máy tính chỉ có thể lưu trữ được các tín hiệu 0 1, do đó, để lưu một số thực vào trong máy tính, chúng ta phải chuyển nó thành 1 chuỗi nhị phân.

Một trong những định dạng số thực trong máy tính đó là IEEE 754 (IEEE754). Số thực được biểu diễn dưới dạng IEEE 754 có độ chính xác đơn (được biểu diễn bằng 32 bit – 1 bit dấu – 8 bit mũ – 23 bit giá trị phần lẻ) và độ chính xác kép (được biểu diễn bằng 64 bit – 1 bit dấu – 11 bit mũ – 52 bit giá trị phần lẻ).

Để có thể lưu được số thực dưới dạng IEEE 754, chúng ta cần phải chuyển số chúng ta cần lưu về dạng số thực chuẩn (số thực chuẩn là số mà phần nguyên không có chứa số 0).

Chuyển đổi số thực sang dạng nhị phân

Ví dụ, chúng ta có số -3.56125, để chuyển sang dạng nhị phân, chúng ta làm các bước sau:

Bước 1 - Chuyển số ở phần nguyên sang hệ nhị phân

Số ở phần nguyên lúc này là 3, chuyển sang nhị phân sẽ là 11.

Bước 2 - Chuyển số ở phần lẻ sang hệ nhị phân

Số ở phần lẻ lúc này là 0.56125, để chuyển số này sang dạng nhị phân, vì số thực ở dạng IEEE có 2 độ chính xác là đơn và kép. Để chuyển sang dạng chính xác đơn, các bạn nhân số 0.56125 cho 223 (đối với độ chính xác kép là 252). Kết quả thu được là 4708106.

Sau đó, chúng ta sẽ lấy kết quả vừa tính ra được trừ lần lượt cho 222 (đối với độ chính xác kép là 252) đến 20.

  • Nếu chúng ta trừ cho 2n mà kết quả < 0 thì bỏ qua.
  • Ngược lại thì chúng ta sẽ tiếp tục thực hiện phép trừ.

Chúng ta sẽ ngừng thực hiện phép trừ khi kết quả ra bằng 0. Ví dụ:

  • 4708106 – 222 = 513802 ( kết quả > 0, tiếp tục thực hiện)
  • 4708106 – 222 – 221 = -1583350 (kết quả < 0, bỏ qua)
  • 4708106 – 222 – 220 = -534774 (kết quả < 0, bỏ qua)
  • 4708106 – 222 – 219 = -10486 (kết quả < 0, bỏ qua)
  • 4708106 – 222 – 218 = 251658 (kết quả > 0, tiếp tục thực hiện)
  • 4708106 – 222 – 218 – 217 = 120586 (kết quả > 0, tiếp tục thực hiện)

Và biểu thức thu được sau khi chúng ta thực hiện phép trừ đến 20 là:

4708106 – 222– 218– 217– 216– 215– 214– 212– 210– 29– 28– 23– 21

Từ biểu thức trên, chúng ta có thể dễ dàng viết ra được số 0.56125 ở hệ nhị phân, những bit nào nằm ở những vị trí trùng với số mũ của số 2 trong biểu thức sẽ là 1, nếu không có thì bằng 0:

22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1 0

Vậy số 0.56125 ở dạng nhị phân sẽ là 0.10001111101011100001010.

Bước 3 - Chuyển phần nguyên và phần lẻ đã được tính thành dạng IEEE 754

Sau khi đã chuyển đổi phần nguyên và phần lẻ sang hệ nhị phân, chúng ta gộp 2 phần đó lại sẽ được là:

11.10001111101011100001010

Để chuyển sang dạng IEEE, số của chúng ta phải chuyển sang dạng floating point:

1.110001111101011100001010 x 21

Phần mũ ở dạng IEEE được tính bằng cách lấy số thiên vị cộng với số mũ bình thường (ở độ chính xác đơn, số thiên vị là 127, ở độ chính xác kép, số thiên vị là 1023). Trong ví dụ của chúng ta, phần mũ ở dạng IEEE sẽ là 127 + 1 = 12810 = 100000002

Vì số của chúng ta là số âm cho nên bit dấu đầu tiên sẽ là 1. Vậy, số -3.56125 sẽ được thể hiện dưới dạng IEEE 754 là:

1 1 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 0 0 0 0 1 0 1

Trong đó:

  • 1 là bit quy định dấu.
  • 10000000 là dải bit lưu trữ phần mũ.
  • 11000111110101110000101 là dải bit lưu trữ phần phân số.
IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024