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?
Trả lời
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ế).
Nghe có vẻ như một lý do kỹ sư điện tử nghèo nàn với tôi ... –
@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
@ 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 –
- 1. Tính bình đẳng và dung sai dấu chấm động
- 2. Cách định dạng số dấu phẩy động vào một chuỗi bằng cách sử dụng Go
- 3. Tại sao java chuyển đổi hai thành dạng số mũ
- 4. Tại sao phân chia số nguyên bằng 0 dẫn đến ngoại lệ dấu chấm động?
- 5. Các số dấu chấm động Java đại diện dưới dạng số thập lục phân
- 6. Tại sao tôi không thể truy cập thuộc tính của một số nguyên bằng một dấu chấm?
- 7. Xác định giá trị dấu chấm động bởi cơ sở và số mũ một cách rõ ràng
- 8. Tại sao một số nguyên theo sau là dấu chấm một chữ số hợp lệ trong JavaScript?
- 9. Làm thế nào để bạn tính toán div và mod của số dấu chấm động?
- 10. Tại sao chạy nước rút của Perl không làm tròn số dấu chấm động chính xác?
- 11. Làm cách nào để tính toán mức trung bình di động theo số mũ trên postgres?
- 12. Tại sao lấy mod của một số trong python nhanh hơn với số mũ?
- 13. Git thanh toán với dấu chấm
- 14. Tính toán độ lệch trung bình và độ lệch tiêu chuẩn có trọng số
- 15. so sánh hằng số dấu chấm động - (0.0? 1: 0)
- 16. Hiệu suất toán học dấu chấm động Android
- 17. Tại sao một số lệnh trong vim yêu cầu dấu hai chấm trong khi một số thì không?
- 18. bằng cách sử dụng {} sau dấu chấm phẩy
- 19. Tại sao số học dấu chấm động trong C# không chính xác?
- 20. Python - số chữ số trong số mũ
- 21. Có toán tử số mũ trong C# không?
- 22. Cách sử dụng dấu chấm/dấu chấm trong hàm R
- 23. Thay thế tất cả các dấu chấm trong một số
- 24. Tính số mũ rất lớn trong python
- 25. Làm cách nào để trừ số IEEE 754?
- 26. Làm thế nào để sử dụng dung sai dấu chấm động trong khung Catch?
- 27. Làm thế nào để phát hiện một số dấu chấm động sử dụng một biểu thức chính quy
- 28. Chúng ta không thể sử dụng các phép toán nguyên tử cho các biến số dấu chấm động trong CUDA?
- 29. PHP lỗi dấu chấm động với cơ bản Toán
- 30. Tính toán gốc thứ N với số học số nguyên
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 .. –
@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? –