Vì đây là CS chứ không phải Stackoverflow, tôi sẽ giả định rằng bạn đang đặt câu hỏi về phân tích số và đặc biệt là (để giữ cho mọi thứ đơn giản) điểm nổi của IEEE-754. Trong trường hợp đó, câu trả lời cho câu hỏi của bạn một phần phụ thuộc vào ý của bạn là "dễ dàng hơn" và một phần dựa trên các chi tiết của hệ thống.
Không có CPU hiện đại nào tôi biết có một lệnh được xây dựng trong đó thực hiện chính xác những gì bạn mong đợi cho hoạt động (mà từ đó chúng ta sẽ gọi , tên thông thường của nó là C) hoặc 2 x ( ). Cả hai đều được thực hiện bằng cách sử dụng các chức năng thư viện.exexp
2xexp2
Như trường hợp của tất cả các phương thức số cho các hoạt động siêu việt, có một vài trường hợp đặc biệt cần xem xét:
exp(NaN) = NaN
exp(+Inf) = +Inf
exp(-Inf) = 0
Tuy nhiên, có một điều khác làm cho vấn đề hơi phức tạp hơn một chút: miền hữu ích khá nhỏ. Đối với binary32, exp(x)
tràn xuống nếu trở lên và tràn ra nếu x > 88,7 trở lên. Bất thường cho các hoạt động siêu việt, chúng ta cũng có thể bỏ qua trường hợp không bình thường, vì không thể phân biệt được nếu là không bình thường. Tất cả những điều trên cũng đúng , ngoại trừ tên miền hơi khác một chút.x<−104x>88.7exp(x)
1.0
x
exp2
Trực giác của bạn là đúng trong đó hầu hết các triển khai đều tính toán . Tuy nhiên, chi phí của phép nhân đó bằng 1ex=2x/ln2 là tầm thường so với phần còn lại của máy tính. Một phương thức điển hình sử dụng bảng được tính toán trước vớicác phần tửK:1ln2exp2
K
exp2(x)=2n×T[j]×P(y)
Trong đó là phần nguyên của x , bảng T chứa các giá trị 2 j / K cho tất cả j trong phạm vi [ 0 , K ) và P là một số xấp xỉ đa thức đến 2 x (tứ phân là đủ cho nhị phân32) trong phạm vi [ 0 , 1nxT2j/Kj[0,K)P2x. Phần2nlà rẻ, vì nó chỉ thao túng số mũ. Tlà một bảng tra cứu. Vì vậy,Pcó thể là phần đắt tiền của hoạt động.[0,1K)2nTP
Tôi nên chỉ ra sự hoàn chỉnh rằng Intel x86 FPU bao gồm một lệnh được gọi f2xm1
, tính toán cho x trong phạm vi [ - 1 , 1 ] . Tuy nhiên, trên một CPU hiện đại, đây là một hướng dẫn khá tốn kém và không có đường ống, và bạn rất nản lòng khi sử dụng nó. Như Hướng dẫn Tham khảo Tối ưu hóa Intel Phần 3.8.5 ghi chú đúng:2x−1x[−1,1]
Mặc dù x87 hỗ trợ các hướng dẫn siêu việt, việc triển khai thư viện phần mềm của chức năng siêu việt có thể nhanh hơn trong nhiều trường hợp.
Chỉnh sửa: Nó đã được chỉ ra trong các ý kiến rằng tôi nên giải thích một số thuật ngữ mới được sử dụng trong IEEE 754-2008. Một số ngôn ngữ đã thay đổi từ năm 1985 và 1987, và hầu hết mọi người đã quen thuộc hơn nhiều với biệt ngữ cũ.
Các thuật ngữ "binary32" và "binary64" là tên mới của các số dấu phẩy động nhị phân 32 bit và 64 bit, mà tiêu chuẩn cũ gọi là "đơn" và "kép" tương ứng.
Thuật ngữ "số không bình thường" thay thế cho thuật ngữ "số không bình thường" trước đó hoặc "số không chuẩn hóa" .