2010-04-10 39 views
13

giả sử loại float trong c, theo đặc tả điểm nổi IEEE, có 8 bit được sử dụng cho phần được phân loại và được tính như lần đầu tiên lấy 8 bit và dịch thành unsigned số, và sau đó trừ BIASE, đó là 2^7 - 1 = 127, và kết quả là một số mũ dao động từ -127 đến 128, bao gồm. Nhưng tại sao chúng ta không thể xử lý các mẫu 8 bit này như một con số đã ký, vì phạm vi kết quả là [-128,127], gần như giống như trước đó.tại sao số dấu chấm động IEEE tính toán số mũ bằng cách sử dụng một dạng sai lệch?

+0

Câu hỏi hay. Ngoài ra tại sao có một chút dấu hiệu ngu ngốc, thay vì xử lý phần bổ trợ như là sự bổ sung của hai người, giống như những người bình thường làm .. –

+1

@Pavel Radzivilovsky: Bạn không thể coi nó như là bổ sung của hai, vì nó được chuẩn hóa với một bit cao tiềm ẩn. Điều gì sẽ là lợi ích của sự bổ sung của hai trong trường hợp này? –

Trả lời

16

Mục đích của thiên vị là sao cho số mũ được lưu trữ ở dạng unsigned, giúp bạn dễ dàng so sánh hơn. Từ Wikipedia:

Bằng cách sắp xếp các lĩnh vực vì vậy các bit dấu là quan trọng nhất vị trí bit , số mũ thiên vị trong giữa, sau đó mantissa trong bit trọng số thấp nhất, giá trị kết quả sẽ được sắp xếp đúng cách, cho dù đó là được hiểu là một dấu phẩy động hoặc giá trị số nguyên . Điều này cho phép so sánh tốc độ cao số dấu phẩy động bằng phần cứng điểm cố định.

Vì vậy, về cơ bản, một số dấu chấm động là:

[sign] [unsigned exponent (aka exponent + bias)] [mantissa] 

This website cung cấp thông tin tuyệt vời về việc tại sao điều này là tốt - đặc biệt, so sánh việc triển khai các chức năng so sánh dấu chấm động.

Ngoài ra, không có câu trả lời hoàn chỉnh nào về các điểm lẻ có thể đi mà không đề cập đến "What Every Computer Scientist Should Know About Floating-Point Arithmetic". Nó dài, dày đặc và nặng nề một chút về toán học, nhưng nó dài dày đặc vàng toán học (hoặc một cái gì đó như thế).

+0

Nghe có vẻ như một lý do kỹ sư điện tử nghèo nàn với tôi ... –

+2

@Pavel, vẫn còn các bộ xử lý không có FPU, f.e. Cánh tay. Làm cho ít nhất hoạt động này dễ làm trên các số nguyên làm cho việc mô phỏng FPU nhanh hơn. – liori

+1

@ vi xử lý ARM gần đây của tôi có FPU [1], nhưng, @Pavel, khi đặc tả điểm nổi IEEE-754 lần đầu tiên được đồng ý vào năm 1985, hầu hết các bộ vi xử lý * không *. Ví dụ, 8086 - bản gốc x86! - chỉ có một FPU thông qua một bộ xử lý mở rộng tùy chọn, 8087 "x87". FPU không được đưa vào cho đến năm 80486, được giới thiệu vào năm 1989. [2] [1] http://www.arm.com/products/processors/technologies/vector-floating-point.php [2 http://en.wikipedia.org/wiki/Floating-point_unit#Add-on_FPUs –

Các vấn đề liên quan