JavaRush /Blog Java /Random-VI /Số thực trong bộ nhớ máy tính. Giải trình.
Marianna
Mức độ
Москва

Số thực trong bộ nhớ máy tính. Giải trình.

Xuất bản trong nhóm
Chào buổi chiều Khi nghiên cứu bài giảng “Các sắc thái khi làm việc với số thực” của nhiệm vụ đầu tiên (phần 2. Cấu trúc của số dấu phẩy động) và các bài giảng bổ sung về chủ đề này, chắc hẳn nhiều bạn đã gặp nhiều câu hỏi về chủ đề này. Ban đầu, tôi cố gắng đưa ra cho mình những câu trả lời cần thiết và bây giờ tôi đưa ra cho bạn để giúp bạn hiểu đầy đủ theo một trình tự logic nhất quán. 1. Hệ thống số thập phân và số nhị phân. 1.1 Hệ thống số thập phân là một trong những hệ thống phổ biến nhất, là hệ thống được chúng ta sử dụng cho bất kỳ phép tính toán học không dùng máy tính nào ở trường học, ở trường đại học, trong cuộc sống. Nó sử dụng các số 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 (tiếng Ả Rập) - tổng cộng có 10 chữ số. Ngoài ra còn có một ký hiệu La Mã cho các con số, tuy nhiên, hiện nay thực tế không được sử dụng. Trong hệ thập phân, việc đếm được thực hiện theo đơn vị chục, trăm, nghìn, chục nghìn, trăm nghìn, triệu, v.v.. - nói cách khác, đây là tất cả các chữ số của số. Chữ số của một sốvị trí (vị trí) của chữ số đó trong bản ghi số. Chữ số thấp nhất của số tự nhiên (và ít ý nghĩa nhất ) là chữ số hàng đơn vị (ngoài cùng bên phải). Tại sao anh lại là người tầm thường nhất? Bởi vì bằng cách bỏ đi chữ số hàng đơn vị của một số, bản thân số đó sẽ thay đổi rất ít (ví dụ: các số 345 và 340). Tiếp theo, chữ số thứ hai là chữ số hàng chục, v.v. Tất cả điều này có nghĩa là gì? Hãy lấy bất kỳ số nguyên nào trong hệ thập phân và phân tách nó thành các chữ số . 3297 = 3*1000 + 2*100 + 9*10 + 7 Như vậy, ta thấy số 32973 đơn vị chữ số thứ tư (tức là 3 nghìn), 2 đơn vị chữ số thứ ba (2 trăm), 9 đơn vị của chữ số thứ hai (9 chục) và 7 đơn vị của chữ số thứ nhất . Nói cách khác, con số này là ba nghìn hai trăm chín mươi bảy và theo đó, nó có vị trí . Còn các chữ số của số phân số (thực) thì sao ? Các chữ số của số phân số (phần phân số của chúng) được gọi là: phần mười, phần trăm, phần nghìn, phần mười nghìn, v.v. Chữ số càng xa dấu thập phân (tính từ toàn bộ phần của số) thì càng ít ý nghĩa (bỏ nó đi, giá trị của số sẽ thay đổi ít). Ví dụ: lấy bất kỳ số phân số nào được trình bày dưới dạng số thập phân: 25,076 = 2*10 + 5 +0*0,1 + 7*0,01 +6*0,001 Do đó, chúng ta thấy rằng số phân số 25,076 chứa 2 chục, 5 đơn vị, 0 phần mười , 7 phần trăm và 6 phần nghìn. Hệ thập phân sử dụng 10 chữ số và bội số của 10 chữ số - do đó có tên là "thập phân". 1.2 Hệ thống số nhị phân là hệ thống số được sử dụng trong hầu hết các máy tính hiện đại và các thiết bị điện tử máy tính khác. Để ghi lại các số, nó chỉ sử dụng hai chữ số - 0 và 1. Để không nhầm lẫn số được viết vào hệ thống số nào, nó được cung cấp một chỉ báo ở dưới cùng bên phải (nó là cơ sở của hệ thống số ), ví dụ: ví dụ: 1000₁₀ 1000₂ Ở đây, số đầu tiên là số nghìn quen thuộc trong hệ thập phân và số dưới cùng là số trong hệ nhị phân và nó bằng trong hệ thập phân... 8 ! Giống như hệ thập phân, hệ nhị phân cũng chia số thành các chữ số . Mỗi chữ số trong số nhị phân được gọi là một bit (hoặc chữ số ). (Nếu ai quan tâm thì 4 bit là nibble (hoặc tetrad), 8 bit là một byte , 16 bit là một từ , 32 bit là một từ kép ). Các bit (chữ số) cũng được đánh số từ phải sang trái, bắt đầu từ 0 (không giống như hệ thập phân). Bit bên phải ít quan trọng nhất, ít quan trọng nhất có số thứ tự là 0 . Tiếp theo là bit đầu tiên , thứ hai , v.v., bit càng cũ thì càng có ý nghĩa (bằng cách tương tự với hệ thập phân mà chúng ta hiểu - nếu bạn loại bỏ những cái đó khỏi số 1455, bạn sẽ chỉ còn lại số 1450 - gần bằng giá trị ban đầu. Nhưng nếu bạn loại bỏ hàng trăm, bạn sẽ còn lại số 1050, vốn đã khác xa giá trị ban đầu, vì vị trí hàng trăm có ý nghĩa (bậc cao) hơn nhiều so với vị trí đơn vị ). Ví dụ. CHƯA ĐỌC :))) Số thực trong bộ nhớ máy tính.  ĐANG TRONG QUÁ TRÌNH PHÁT TRIỂN!!!  - 2 Ở phía dưới, các bit của số nhị phân phân số này được đánh số màu đỏ - tổng cộng chúng ta có 18 bit (chữ số) của số này. Nhìn về phía trước, tôi muốn lưu ý rằng các số phân số được lưu trữ trong bộ nhớ máy tính theo một cách hoàn toàn khác - điều này sẽ được thảo luận sau. Trong lúc chờ đợi, chúng ta hãy tìm hiểu cách chuyển đổi số từ hệ thống số này sang hệ thống số khác. 2. Chuyển đổi số nguyên, phân số từ hệ thập phân sang hệ nhị phân và ngược lại. 2.1 Chuyển đổi từ thập phân sang nhị phân. 2.1.1 Số nguyên. Để chuyển một số nguyên thập phân sang hệ nhị phân, bạn cần chia số này cho 2, ghi số dư của phép chia (luôn bằng 0 hoặc 1, tùy số chẵn hay lẻ) , rồi lại chia kết quả của phép chia cho 2, ghi lại phần dư của phép chia (0 hoặc 1) và chia lại kết quả của phép chia thứ hai cho 2. Tiếp tục như vậy cho đến khi kết quả của phép chia bằng 1. Tiếp theo, chúng ta viết ra tất cả các số 0 và số 1 theo thứ tự ngược lại , bắt đầu từ kết quả chia gần đây nhất, luôn bằng 1. Lưu ý quan trọng. Kết quả cuối cùng của phép chia tuần tự BẤT KỲ INTEGER nào cho 2 sẽ luôn là một (1)! Nếu kết quả lớn hơn 1, chúng ta tiếp tục chia kết quả này cho 2 cho đến khi nhận được kết quả là 1. Và kết quả của phép chia cho 2 chỉ có thể bằng 0 (0) trong một trường hợp - đây là phép chia của số 0 cho 2. Ví dụ. Hãy chuyển đổi số 145 từ hệ thập phân sang hệ nhị phân. 145/2 = 72 (số dư 1 ) 72/2 = 36 (số dư 0 ) 36/2 = 18 (số dư 0 ) 18/2 = 9 (số dư 0 ) 9/2 = 4 (số dư 1 ) 4/2 = 2 (số dư 0 ) 2/2 = 1 (số dư 0 ) Bây giờ chúng ta “thu thập” số nhị phân theo thứ tự ngược lại. Chúng ta nhận được số 10010001. Xong! Sắc thái thú vị 1. Hãy chuyển số 1 từ hệ thập phân sang hệ nhị phân. Trong hệ nhị phân, số này cũng sẽ được viết là 1. Suy cho cùng, kết quả cuối cùng của phép chia cho 2, vốn phải bằng 1, đã bằng chính số 1. 1₁₀ = 1₂ Sắc thái thú vị 2. Hãy chuyển đổi số 0 từ hệ thập phân sang hệ nhị phân. Trong hệ nhị phân, số này cũng sẽ được viết là 0. 0₁₀ = 0₂ 2.1.2 Số phân số. Làm thế nào để chuyển đổi số phân số thành nhị phân? Để chuyển một phân số thập phân sang hệ nhị phân, các em phải: a) chuyển toàn bộ phần của phân số sang hệ nhị phân theo thuật toán đã học ở đoạn 2.1.1 b) nhân phần phân số với 2 , viết chữ số kết quả của kết quả TRƯỚC dấu thập phân (luôn bằng 0 hoặc 1, là logic), sau đó CHỈ nhân phần phân số của kết quả thu được với 2 một lần nữa, viết chữ số kết quả của kết quả TRƯỚC dấu thập phân (0 hoặc 1), v.v. cho đến khi phân số một phần kết quả của phép nhân trở thành bằng 0 hoặc cho đến khi đạt số chữ số thập phân cần thiết ( độ chính xác bắt buộc ) (bằng số phép nhân với 2). Sau đó, bạn cần viết ra chuỗi kết quả gồm các số 0 và số 1 được viết THEO ĐẶT HÀNG sau điểm ngăn cách phần nguyên và phần phân số của số thực (phân số). Ví dụ 1. Hãy chuyển số 2,25 (2 phẩy 25 phần trăm) từ hệ thập phân sang hệ nhị phân. Trong hệ nhị phân, phân số sẽ bằng 10,01 . Làm thế nào chúng tôi có được điều này? Số bao gồm phần nguyên (tối đa một điểm) - đây là 2 và phần phân số - đây là 0,25. 1) Dịch toàn bộ phần: 2/2 = 1 (dư lượng 0 ) Toàn bộ phần sẽ là 10 . 2) Dịch phần phân đoạn. 0,25 * 2 = 0 ,5 (0) 0,5 * 2 = 1 ,0 (1) Phần phân số trở thành bằng 0 do nhân liên tiếp với 2. Chúng ta dừng nhân. Bây giờ chúng tôi “thu thập” phần phân số THEO ĐẶT HÀNG - chúng tôi nhận được 0,01 trong hệ nhị phân. 3) Cộng phần nguyên và phần phân số - ta được phân số thập phân 2,25 sẽ bằng phân số nhị phân 10,01 . Ví dụ 2. Hãy chuyển số 0,116 từ hệ thập phân sang hệ nhị phân. 0,116 * 2 = 0,232 (0) 0,232 * 2 = 0,464 (0) 0,464 * 2 = 0,928 (0) 0,928 * 2 = 1,856 (1) // loại bỏ phần nguyên của kết quả này 0,856 * 2 = 1 .712 (1 ) //loại bỏ toàn bộ phần của kết quả này 0.712 * 2 = 1 .424 (1) //loại bỏ toàn bộ phần của kết quả này 0.424 * 2 = 0 .848 (0) Như chúng ta có thể thấy, phép nhân cứ tiếp tục như vậy , phần phân số của kết quả không bằng 0. Sau đó, chúng tôi quyết định rằng chúng tôi sẽ chuyển đổi phân số thập phân thành nhị phân với độ chính xác là 7 chữ số thập phân (bit) sau dấu phẩy (trong phần phân số). Chúng ta hãy nhớ lại những gì chúng ta đã học về các bit không đáng kể - bit (bit) càng xa toàn bộ phần thì chúng ta càng dễ bỏ qua nó (giải thích ở phần 1 của bài giảng, ai quên). Chúng ta nhận được phân số nhị phân 0,0001110 với độ chính xác là 7 bit sau dấu chấm. 2.2 Chuyển đổi từ nhị phân sang thập phân. 2.2.1 Số nguyên. Để dịch toàn bộsố từ hệ nhị phân sang số thập phân, cần chia số này thành các chữ số (bit) và nhân mỗi chữ số (bit) với số 2 đến một độ dương nhất định (độ này bắt đầu tính từ phải sang trái từ số ít quan trọng nhất). (bit bên phải) và bắt đầu từ 0 ). Nói cách khác, lũy thừa của hai bằng số của một bit nhất định (nhưng quy tắc bất thành văn này chỉ có thể được sử dụng trong trường hợp chuyển đổi số nguyên , vì đối với các số phân số, việc đánh số bit bắt đầu từ phần phân số, được dịch sang hệ thập phân một cách khác ). Tiếp theo bạn cần thêm các sản phẩm kết quả. Ví dụ. Hãy chuyển đổi số nhị phân 110011 sang hệ thống số thập phân. 110011₂ = 1*2⁵ + 1*2⁴ + 0*2³ + 0*2¹ + 1*2¹ + 1*2º = 32 +16 +0 + 0 + 2 + 1 = 51₁₀ Kết quả là chúng ta nhận được số 51 trong hệ thống nhị phân . Để biết thông tin, dưới đây là bảng lũy ​​thừa đầu tiên của số 2 . CHƯA ĐỌC :))) Số thực trong bộ nhớ máy tính.  ĐANG TRONG QUÁ TRÌNH PHÁT TRIỂN!!!  - 5 ! Xin lưu ý rằng lũy ​​thừa 0 của một số luôn là 1. 2.2.2 Phân số. Để chuyển một số phân số nhị phân (thực) thành số thập phân , bạn phải: a) chuyển phần nguyên của nó thành số thập phân theo thuật toán ở đoạn 2.2.1 ; b) dịch phần phân số của nó như sau. Cần trình bày phần phân số dưới dạng tổng các chữ số của hai , nâng lên một lũy thừa âm nhất định (lũy thừa của chữ số đầu tiên sau dấu chấm (sau toàn bộ phần của phân số) sẽ bằng -1, đối với chữ số thứ hai sau dấu chấm sẽ bằng -2, v.v.) Kết quả số tiền này sẽ là phần phân số của số trong hệ thập phân. Ví dụ. Hãy chuyển đổi số 10111.01 sang hệ nhị phân. 10111.01₂ = (1*2⁴ + 0*2³ + 0*2² + 1*2¹ + 1*2º) . (0*2ˉ¹ + 1*2ˉ²) = (16 + 0 + 4 + 2 + 1) . (0 + 0,25) = 23,25₁₀ Kết quả là chúng ta nhận được số 23,25 trong hệ thống số thập phân. Bảng lũy ​​thừa âm đầu tiên của 2 được đưa ra dưới đây. CHƯA ĐỌC :))) Số thực trong bộ nhớ máy tính.  ĐANG TRONG QUÁ TRÌNH PHÁT TRIỂN!!!  - 7 2.2.3 Công thức chung chuyển số từ nhị phân sang thập phân. Hãy đưa ra một công thức chung để chuyển đổi số từ nhị phân sang thập phân (cả phần nguyên và phần phân số). CHƯA ĐỌC :))) Số thực trong bộ nhớ máy tính.  ĐANG TRONG QUÁ TRÌNH PHÁT TRIỂN!!!  - 4 trong đó A là một số trong hệ số nhị phân; Cơ số của hệ thống số là 2 (nghĩa là mỗi bit được nhân với lũy thừa 2); N- số chữ số nguyên (bit) ; m là số chữ số phân số (bit) của số . Bit đầu tiên của phần nguyên tính từ điểm chia được tô sáng màu đỏ . Nó luôn được nhân với 2 đến lũy thừa 0. Bit tiếp theo trước nó (ở bên trái) được nhân với 2 lũy thừa thứ nhất, v.v. Bit đầu tiên của phần phân số tính từ điểm chia được đánh dấu bằng màu xanh lục . Nó luôn được nhân với 2 đến lũy thừa âm thứ nhất. Bit tiếp theo bên phải được nhân với 2 đến lũy thừa âm thứ hai, v.v. 3. Ký hiệu khoa học: ký hiệu chuẩn hóa trong cả hai hệ thống. Mantissa, số mũ, mức độ số mũ. 3.1 Dạng viết số mũ. Trước đây, chúng tôi đã nghiên cứu một sơ đồ chi tiết để ghi các số vị trí theo chữ số. Hãy lấy số 0,0000000000000000000016 . Nó có một mục rất dài ở dạng tiêu chuẩn . Và ở dạng hàm mũ nó sẽ như thế này: 1.6 * 10ˉ²¹ Vậy dạng hàm mũ của một số là gì và cách biểu diễn số đó ở dạng này? Ký hiệu khoa học cho một số là cách biểu diễn các số thực dưới dạng phần định trịsố mũ . Thuận tiện cho việc biểu diễn các số rất lớn và rất nhỏ, cũng như để thống nhất cách viết của chúng. N = M * pⁿ trong đó N là số cần viết, Mphần định trị của số, p là cơ số (bằng cơ số của hệ số đã cho), n (số nguyên) là cấp (độ) , có thể dương và âm), p mũ n là các số đặc trưng (số mũ, tức cơ số nâng lên lũy thừa (bậc)). Một sắc thái quan trọng. Nếu phần nguyên của số thập phân khác 0 thì thứ tự (độ) của số mũ sẽ là dương , nếu phần nguyên bằng 0 thì bậc của số mũ sẽ âm . 3.2 Dạng viết số chuẩn hóa và chuẩn hóa. Dạng thông thường của số là dạng trong đó phần định trị (không tính đến dấu) nằm trên nửa khoảng [0,1], tức là 0 <= M < 1. Dạng viết này có một nhược điểm: một số số được viết mơ hồ (ví dụ: 0,0001 có thể được viết là 0,000001*10², 0,00001⋅10¹, 0,0001⋅10°, 0,001⋅10ˉ¹, v.v.). Vì vậy, một hình thức ghi âm khác đang phổ biến (đặc biệt là trong khoa học máy tính) - chuẩn hóa, trong đó phần định trị của số thập phân nhận các giá trị từ 1 (đã bao gồm) đến 10 (độc quyền), tức là 1 <= M < 10 (tương tự, phần định trị của số nhị phân nhận các giá trị từ 1 đến 2 ). Nói cách khác, phần định trị trong hệ thập phân phải là một số phân số từ 1,0 (bao gồm) đến 10 (độc quyền) , tức là. phần nguyên của phần định trị phải chứa một chữ số duy nhất và phần phân số không bị giới hạn về mặt toán học. Ưu điểm của dạng chuẩn hóa là do đó, bất kỳ số nào (trừ 0) đều được viết theo một cách duy nhất. Nhược điểm là không thể biểu diễn số 0 dưới dạng này nên cách biểu diễn số trong khoa học máy tính cung cấp một dấu (bit) đặc biệt cho số 0. 3.3 Ví dụ về viết số thập phân dưới dạng chuẩn hóa hàm mũ. Hãy xem xét các ví dụ. Ví dụ 1. Viết số thập phân 1015000 (một triệu mười lăm nghìn) dưới dạng chuẩn hóa hàm mũ. Hệ thống số cho số này là số thập phân nên cơ số sẽ là 10 . Hãy chọn mantissa . Để làm điều này, hãy tưởng tượng số dưới dạng phân số, phần phân số của nó sẽ bằng 0 (vì số này là số nguyên): 1000000.0. Nếu phần nguyên của số lớn hơn 0 thì di chuyển điểm sang bên trái vị trí ban đầu của nó (bên trong phần nguyên) cho đến khi chỉ còn một chữ số trong phần nguyên . Sau đó chúng tôi đặt một khoảng thời gian. Chúng tôi loại bỏ các số 0 không đáng kể (ở cuối số). Chúng ta nhận được phần định trị của số bằng 1,015 . Hãy xác định bậc (thứ tự) của cơ số của số. Điểm phân cách phần nguyên và phần phân số đã di chuyển bao nhiêu vị trí về bên trái? Cho sáu vị trí. Điều này có nghĩa là thứ tự sẽ là 6 . Trong trường hợp này, thứ tự là dương (chúng ta đã di chuyển điểm trong phần nguyên của số không bằng 0). Mục cuối cùng ở dạng chuẩn hóa: 1.015 * 10⁶ . Chúng ta có thể viết số này dưới dạng sau: 1.015E6 (trong đó E6 là số mũ của một số thập phân, tức là 10 mũ 6). Chúng ta hãy tự kiểm tra . Ký hiệu số mũ của một số không gì khác hơn là tích của một số (mantissa) và một số khác (số mũ). Điều gì xảy ra nếu bạn nhân 1,015 với 10⁶? 1,015*10⁶ = 1,015*1000000 = 1015000 . Đúng rồi. Cách tiếp cận này (chuẩn hóa) giúp tạo ra một bản ghi rõ ràngsố ở dạng hàm mũ, như đã chỉ ra ở trên. Ví dụ 2. Viết số thực thập phân 0,0098 ở dạng chuẩn hóa. Hãy làm nổi bật cơ số của số - nó bằng 10 (hệ số thập phân). Hãy chọn phần định trị của số - nó bằng 9,8 (phần nguyên của số bằng 0, nghĩa là chúng ta di chuyển điểm sang bên phải đến chữ số có nghĩa đầu tiên (nằm trong phạm vi từ 1 đến 9) .Chúng ta xác định thứ tự của số - chúng ta đã di chuyển điểm theo ba vị trí, nghĩa là thứ tự là 3. Số dương là âm hay âm?Vì chúng ta đã di chuyển điểm sang bên phải (trong phần phân số của số), nên thứ tự (công suất) sẽ âm . Bản ghi cuối cùng của số ở dạng chuẩn hóa là 9,8 * 10ˉ³ hoặc 9,8E-3 . Chúng ta hãy tự kiểm tra lại. Nhân 9,8 với 10ˉ³. 9,8 * 10ˉ³ = 9,8 * 0,001 = 0,0098 . Đúng vậy. Ví dụ 3. Viết số thực thập phân 3,56 ở dạng chuẩn hóa. Chọn cơ số của số - nó bằng 10 (hệ số thập phân). Chọn phần lớn của số - nó bằng... 3.56 (số nguyên) một phần của số là một chữ số, không bằng 0. Điều này có nghĩa là điểm không cần phải dịch chuyển đi bất cứ đâu, bản thân số đó sẽ là phần định trị.) Hãy đánh dấu thứ tự của cơ số: Phần định trị nên bằng số nào , bằng chính số đó, nhân lên sao cho không thay đổi? Trên mỗi đơn vị. Điều này có nghĩa là thứ tự sẽ bằng không. Bản ghi cuối cùng của số ở dạng chuẩn hóa là 3,56 * 10° hoặc 3,56E0. 4. Lưu trữ số thực trong bộ nhớ máy tính: float và double. 4.1 Các loại float và double. Hãy chuyển sang phần quan trọng của bài giảng của chúng tôi. Như chúng ta đã biết, có hai loại số thực trong Java: floatdouble . Kiểu float chiếm 32 bit trong bộ nhớ máy tính và có thể lấy các giá trị trong khoảng [3.4E-38; 3,4E+38) (nói cách khác, trong khoảng từ 3,4*10ˉ³⁸ (đã bao gồm) đến 3,4 * 10³⁸ (không bao gồm)). Sắc thái quan trọng 1. Số thực có thể dương hoặc âm. Phạm vi ở trên được trình bày để chỉ ra các mô-đun số có trong phạm vi float. Sắc thái quan trọng 2. 10³⁸ xấp xỉ bằng 2¹²⁷ , tương ứng, 10 ˉ³⁸ xấp xỉ bằng 2ˉ¹²⁷ . Như vậy, khoảng giá trị tuyệt đối của số float có thể được viết là [3,4 * 2ˉ¹²⁷; 3,4 * 2¹²⁷). Loại kép chiếm gấp đôi bộ nhớ máy tính -64 bit và có thể chấp nhận các giá trị thập phân trong phạm vi [-1.7E+308; 1.7E+308) tương ứng. 4.2 Dạng chuẩn hóa hàm mũ của số nhị phân. Chúng ta biết rằng các số được lưu trữ ở dạng nhị phân trong bộ nhớ máy tính. Vì vậy, hãy lấy số 1560.256 (kiểu float) và chuyển nó sang hệ nhị phân ở dạng vị trí: 11000011000.01000001100 . Bạn có thể nghĩ rằng đây là cách nó sẽ được lưu trữ trong bộ nhớ máy tính. Nhưng điều đó không đúng! Trong bộ nhớ máy tính, các kiểu floatdouble ( kiểu dấu phẩy động thực ) được lưu trữ ở dạng chuẩn hóa theo hàm mũ , nhưng cơ số của lũy thừa là 2 thay vì 10. Điều này là do thực tế là, như đã nêu ở trên, tất cả dữ liệu trong máy tính được biểu diễn dưới dạng nhị phân (bit). Một lượng bộ nhớ máy tính nhất định được phân bổ cho một số. Hãy biểu thị số dương 15,2 ở dạng hàm mũ chuẩn hóa: 1,52*10¹ . Tiếp theo, hãy biểu thị "song sinh" nhị phân 1111.00110011001 của nó cũng theo ký hiệu chuẩn hóa theo cấp số nhân, sử dụng cùng một thuật toán: 1) Cơ số sẽ bằng 2 2) Phần định trị sẽ bằng 1.11100110011001 3) Độ sẽ dương và bằng 3 (điểm được dịch sang trái 3 bit) trong hệ thập phân. Hãy chuyển nó sang hệ nhị phân: 11 . Vì vậy, ở dạng chuẩn hóa theo cấp số nhân nhị phân, nó sẽ là 1,11100110011001 * 2¹¹. 4.3 Lưu trữ dạng nhị phân chuẩn hóa theo cấp số nhân của số thực trong bộ nhớ máy tính. Vì vậy, chúng tôi đã tìm ra rằng một số thực sẽ được lưu trữ trong bộ nhớ máy tính ở dạng nhị phân chuẩn hóa theo cấp số nhân . Nó sẽ trông như thế nào trong bộ nhớ? Hãy lấy kiểu float . Máy tính phân bổ 32 bit cho mỗi số float . Chúng được phân phối như sau . Hình này hiển thị sơ đồ bộ nhớ được phân bổ cho số float 32 bit trong máy tính. CHƯA ĐỌC :))) Số thực trong bộ nhớ máy tính.  ĐANG TRONG QUÁ TRÌNH PHÁT TRIỂN!!!  - 5 Việc đánh số bit được biểu thị bằng màu đỏ . Màu xanh lá cây biểu thị một phần bộ nhớ được phân bổ (1 bit) để lưu trữ dấu của số. Màu vàng biểu thị một phần bộ nhớ được phân bổ để lưu trữ lũy thừa (thứ tự) đã dịch chuyển của dạng số mũ (8 bit). Màu xanh da trờibiểu thị một phần bộ nhớ được phân bổ để lưu trữ phần định trị chuẩn hóa của một số không có đơn vị ẩn (23 bit). Chúng ta hãy xem xét kỹ hơn. 1) Bit dấu. Bit có ý nghĩa nhất (đầu tiên từ bên trái) luôn được phân bổ để lưu trữ dấu của số (1 nếu số âm và 0 nếu số dương). Một ngoại lệ có thể là số 0 - trong lập trình, số 0 có thể vừa âm vừa dương . 2) Tiếp theo là các bit bậc (thứ tự) của số mũ với cơ số 2 . Đối với điều này, 8 bit được phân bổ. Mức độ mũ của số float , như chúng ta biết, có thể vừa âm (đối với các số có phần nguyên là 0, xem đoạn 3.3) vừa dương (đối với các số có phần nguyên khác 0) và nằm trong khoảng từ 2ˉ¹²⁷ đến 2¹²⁷ . Về lý thuyết, chúng ta nên phân bổ một bit để xác định dấu của số mũ, như trường hợp bit dấu. Nhưng điều đó không đúng. Để không lãng phí một chút vào việc xác định dấu của số mũ, số float thêm phần bù vào số mũ nửa byte +127 (0111 1111). Do đó, thay vì một dải công suất từ ​​2ˉ¹²⁷ đến 2¹²⁷, máy tính lưu trữ một dải công suất từ ​​0 đến +254 - tất cả các giá trị công suất đều dương , không cần lãng phí thêm một byte vào dấu. Nó chỉ ra rằng giá trị của số mũ được dịch chuyển một nửa so với giá trị có thể. Điều này có nghĩa là để có được giá trị thực của số mũ, bạn phải trừ phần bù này khỏi giá trị được lưu trong bộ nhớ. Nếu giá trị số mũ được lưu trong bộ nhớ nhỏ hơn giá trị offset (+127), thì số mũ là số âm: điều này là hợp lý. Ví dụ. Hãy thực hiện phép dịch chuyển độ âm -18 . Chúng ta thêm phần bù +127 vào nó, chúng ta nhận được giá trị của độ +108 (đừng quên độ 0 trong phép tính). Hãy chuyển đổi độ sang dạng nhị phân: 1101100 Nhưng 8 bit bộ nhớ được phân bổ cho độ và ở đây chúng ta nhận được số 7 bit. Thay cho chữ số cao (bit) trống, chưa được sử dụng, máy tính thêm 0. Kết quả là độ này sẽ được lưu trong bộ nhớ của máy tính là 01101100 . Hãy xem: +108 < +127, có nghĩa là độ thực sự là âm. Hãy xem xét bảng thú vị sau: Nó hiển thị tất cả các giá trị có thể có của lũy thừa của dạng chuẩn hóa của số thực trong hệ nhị phân và thập phân. Như chúng ta có thể thấy, trong hệ nhị phân +127 chính xác bằng một nửa byte (8 bit). 3) 23 bit còn lại được dành riêng cho phần định trị CHƯA ĐỌC :))) Số thực trong bộ nhớ máy tính.  ĐANG TRONG QUÁ TRÌNH PHÁT TRIỂN!!!  - mười một. Nhưng đối với một phần định trị nhị phân được chuẩn hóa, bit có ý nghĩa nhất (còn gọi là phần nguyên của phần định trị được chuẩn hóa) luôn bằng 1 (được gọi là ẩn một ), vì số lượng của phần định trị nằm trong phạm vi 1<=M<2 (và cũng nhớ lại đoạn 2.1.1 của bài giảng). Ngoại lệ duy nhất là số 0. Không có ích gì khi ghi một đơn vị vào 23 bit được phân bổ và gây lãng phí bộ nhớ, vì vậy phần còn lại của phần định trị (phần phân số của nó) được ghi vào 23 bit được phân bổ. Hóa ra về cơ bản phần quan trọng của số float có độ dài 24, trong đó một bit ít hơn được lưu trữ. Một sắc thái quan trọng. Chúng ta hãy nhớ rằng khi chuyển đổi số phân số thập phân thành số nhị phân, phần phân số trong hệ nhị phân thường rất lớn. Và chúng ta chỉ có 32 bit để lưu số float. Trong trường hợp này, các chữ số thấp nhất, ít ý nghĩa nhất của phân số nhị phân (hãy nhớ đoạn 2.1.2 của bài giảng này) sẽ không được đưa vào bộ nhớ được phân bổ và máy tính sẽ bỏ qua chúng . Độ chính xác của con số sẽ bị mất , nhưng bạn thấy đấy, nó chỉ ở mức tối thiểu. Nói cách khác, độ chính xác của số float phân số 6-7 chữ số thập phân. 4.4 Lưu trữ dạng nhị phân chuẩn hóa hàm mũ của số kép trong bộ nhớ máy tính. Số thực kiểu double được lưu trữ trong bộ nhớ máy tính giống như số float, ngoại trừ một số đặc điểm. Một số kép có 64 bit trong bộ nhớ máy tính. Chúng được phân bổ như sau (cũng theo thứ tự từ trái sang phải): 1) Bit dấu (xem đoạn 4.3). Chúng ta hiểu rằng số của bit này sẽ là 63 . 2) Bằng cấp (thứ tự). Các số kép được phân bổ 11 bit để lưu trữ nó . Việc chuyển đổi độ cũng được thực hiện , nhưng đối với số kép nó sẽ bằng +1023. 3) Mantissa (phần quan trọng). Các số kép được phân bổ 52 bit (chữ số) để lưu trữ nó. Ngoài ra, phần nguyên chính xác của phần định trị (đơn vị ẩn ) không được lưu trong bộ nhớ . Cũng cần lưu ý rằng độ chính xác của phép nhân đôi phân số khoảng 16 chữ số thập phân . 4.5 Ví dụ biểu diễn số thực của hệ thập phân trong bộ nhớ máy tính. Và điểm cuối cùng của bài giảng của chúng ta sẽ là một ví dụ về cách chuyển một số phân số của hệ thập phân sang dạng lưu trữ trong bộ nhớ máy tính để củng cố sự hiểu biết về chủ đề. Ví dụ 1. Lấy một số-4,25 loại phao. Hãy trình bày nó ở dạng chuẩn hóa theo cấp số nhân trong hệ thống số nhị phân, ghi nhớ mọi thứ chúng ta đã đề cập trong bài giảng này. 1) Chuyển phần nguyên của số sang dạng nhị phân: 4/2 = 2 (dư của phép chia 0 ) 2/2 = 1 (dư của phép chia 0 ) Phần nguyên sẽ bằng 100 trong hệ nhị phân. 2) Chuyển phần phân số sang dạng nhị phân. 0,25*2 = 0,5 ( 0 ) 0,5*2 = 1,0 ( 1 ) Phần phân số sẽ bằng 0,01 trong hệ nhị phân. 3) Do đó, -4,25₁₀ = -100,01₂ . 4) Hãy chuyển số -100,01₂ thành dạng chuẩn hóa theo cấp số nhân trong hệ số nhị phân (có nghĩa là cơ số lũy thừa sẽ là 2). -100,01₂ = -1,0001 *2² Hãy chuyển đổi giá trị độ từ định dạng thập phân sang nhị phân . 2/2= 1 (dư lượng 0 ) Độ là 10₂. Chúng tôi nhận được rằng số -4,25₁₀ ở dạng chuẩn hóa hàm mũ nhị phân của nó sẽ bằng -1,0001 * 2¹º Hãy viết ra nó trông như thế nào trong bộ nhớ máy tính. Bit dấu sẽ là 1 (số âm). Phần bù số mũ bằng 2+127 = 129₁₀ = 10000001₂ Chúng tôi loại bỏ số ẩn khỏi phần định trị , chúng tôi nhận được 000100000000000000000000 ( chúng tôi điền các bit bậc thấp không có người sử dụng bằng số 0 ). Điểm mấu chốt. 1 10000001 0001000000000000000000000 - đây là cách số -4,25 được lưu trữ trong bộ nhớ máy tính. Ví dụ 2. Chuyển số float 0,75₁₀ thành định dạng lưu trữ nhị phân trong bộ nhớ máy tính. Kết quả phải là 0 01111110 1000000000000000000000000 . Cảm ơn bạn đã chú ý.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION