Làm thế nào để máy tính tính giá trị tội lỗi? [đóng cửa]


28

Làm thế nào để một máy tính tính một giá trị tội lỗi? Về mặt logic, khi tôi nghĩ về nó, cách rõ ràng duy nhất là đưa nhiều giá trị tội lỗi vào bộ nhớ và khi giá trị sin cần được "tính toán", nó sẽ chỉ lấy dữ liệu từ một địa chỉ bộ nhớ cụ thể. (Ví dụ: sin (x) sẽ kéo dữ liệu từ địa chỉ bộ nhớ chứa giá trị của sin (x)) Đó dường như là cách khả thi duy nhất để làm điều đó. Hoặc có một hàm có thể được sử dụng để tính sin của một giá trị? Tôi thực sự đang cố gắng hỏi làm thế nào một máy tính tính toán tội lỗi ở cấp độ cơ sở. Có cách nào để xấp xỉ các giá trị tội lỗi bằng cách sử dụng một hàm khác bao gồm các hoạt động "cơ bản" hơn và ALU sẽ có thể thực hiện nhiều thao tác "cơ bản" để xấp xỉ giá trị tội lỗi, hay chỉ là lấy giá trị từ bộ nhớ?


10
Google "CORDIC". Google "Taylor series". Và suy nghĩ của bạn về bộ nhớ không rõ ràng.
Eugene Sh.

8
Phương pháp "bộ nhớ" là một kỹ thuật tối ưu hóa, thường được sử dụng (tên là "bảng tra cứu"). Nhưng không, ban đầu máy tính không có nó. Nhưng nếu bạn đã từng đi lang thang về cách tính toán của máy tính <placeholder>, hãy google " <placeholder>thuật toán tính toán". Nó hoạt động tốt hơn so với yêu cầu SE trong hầu hết các trường hợp ..
Eugene Sh.

5
Ngoài CORDIC và Taylors ', hãy đảm bảo bạn cũng tìm kiếm Ch Quashev cùng với các kỹ thuật minimax phi tuyến tính. Taylor giới hạn lỗi trung bình , trong khi Ch Quashev giới hạn lỗi tối đa và cũng đóng nhanh hơn. Minimax là cần thiết bởi vì hằng số không chính xác vô hạn và cũng không phải là hoạt động. Và bạn cần khai thác các đối xứng, như điên!
jonk

3
Bạn có biết rằng có một loạt có thể được sử dụng để tính toán tội lỗi giống như có cos, log, số mũ, số pi, căn bậc hai, v.v.
Andy aka

2
Tất nhiên bạn có thể có nội dung trong bộ nhớ máy tính "ngay từ đầu" - bạn nghĩ máy tính khởi động như thế nào? Các giá trị ban đầu có thể được nối vào mạch, được tích hợp vào các ô nhớ chỉ đọc hoặc các lớp kim loại hóa của một ic, được đốt thành cầu chì, được lưu trữ dưới dạng điện tích bị mắc kẹt cũng như đọc từ đĩa, băng đục lỗ hoặc chuyển đổi - bất kỳ phương pháp nào có thể sử dụng cho phần mềm về nguyên tắc cũng hữu ích cho các bảng được tính toán trước, và trên thực tế, nhiều thuật toán cần các hằng số khác nhau. Điều gì là tốt nhất thực sự phải được quyết định dựa trên yêu cầu, công nghệ và thậm chí những tài nguyên còn sót lại sau những nhu cầu khác.
Chris Stratton

Câu trả lời:


30

Thông thường, các hàm sin (x) có độ phân giải cao sẽ được triển khai bằng thuật toán CORDIC (COrdiate Rotation DIgital Computer), có thể được thực hiện với một số lượng nhỏ các lần lặp chỉ sử dụng dịch chuyển và cộng / trừ và một bảng tra cứu nhỏ. Bài báo gốc Kỹ thuật điện toán CORDIC của Jack Volder là từ năm 1959. Nó cũng hoạt động độc đáo khi được thực hiện với phần cứng trong một đồ họa (và một thuật toán tương tự sẽ được triển khai trong một FPU phần cứng cho những máy vi tính có FPU).

Đối với độ phân giải thấp hơn, ví dụ để tạo sóng hình sin tổng hợp cho biến tần hoặc VFD động cơ (Biến tần), bảng tra cứu (LUT) có hoặc không có phép nội suy hoạt động tốt. Chỉ cần lưu trữ các giá trị cho một góc phần tư của sóng hình sin vì tính đối xứng.

Như @Temlib chỉ ra, các thuật toán được sử dụng trong các FPU hiện đại sử dụng việc giảm phạm vi theo sau là một đánh giá sử dụng một cái gì đó giống như thuật toán Remez để hạn chế lỗi tuyệt đối tối đa. Có thể tìm thấy nhiều hơn trong bài viết này của Intel Xác minh chính thức các hàm lượng giác của dấu phẩy động .


2
CORDIC thay vì chuyển đổi chức năng cố định phần cứng thuần túy (ứng dụng lịch sử đầu tiên của nó). Đối với một máy tính có FPU, các phép tính gần đúng đa thức sẽ nhanh hơn và phù hợp hơn khi chúng sử dụng lại các toán tử số học hiện có thay vì một máy dịch chuyển và thêm CORDIC đặc biệt.
TEMLIB

1
@TEMLIB Vâng, đó là một điểm hợp lệ, tôi sẽ thêm câu đó vào câu trả lời. CORDIC cũng được sử dụng trong các máy tính khoa học đầu tiên, chẳng hạn như HP-35.
Spehro Pefhany

Theo hiểu biết của tôi, CORDIC đã triển khai phần cứng đầu tiên trong máy tính bàn HP 9100A. Nó có một thẻ mạch in khoảng một hình vuông, được phủ điốt, được dùng làm ROM lưu trữ các tham số được sử dụng bởi các thuật toán CORDIC.
Licks nóng

@HotLicks - bạn sẽ không chính xác, CORDIC đã được phát triển và sử dụng trong máy tính điều hướng trên máy bay gần mười năm trước HP 9100A.
Chris Stratton

@ChrisStratton - Tôi đứng sửa.
Hot Licks

14

Hầu hết các thư viện trig máy tính đều dựa trên các xấp xỉ đa thức , mang lại sự cân bằng tốt nhất giữa tốc độ chính xác. Ví dụ, một tá các phép toán nhân và cộng / trừ là đủ để cung cấp độ chính xác đơn chính xác đầy đủ cho sin và cos.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.