Bagaimana komputer menghitung nilai dosa? [Tutup]

28

Bagaimana cara komputer menghitung nilai dosa? Secara logis, ketika saya memikirkannya satu-satunya cara yang jelas adalah dengan memasukkan banyak nilai dosa ke dalam memori, dan ketika nilai dosa perlu "dihitung", itu hanya akan menarik data dari alamat memori tertentu. (Mis. Sin (x) akan menarik data dari alamat memori yang mengandung nilai sin (x)) Itu sepertinya satu-satunya cara yang mungkin untuk melakukannya. Atau adakah fungsi yang dapat digunakan untuk menghitung dosa suatu nilai? Saya benar-benar mencoba bertanya bagaimana komputer menghitung dosa pada tingkat dasar. Apakah ada cara untuk memperkirakan nilai dosa menggunakan fungsi berbeda yang terdiri dari lebih banyak operasi "dasar", dan ALU akan dapat melakukan beberapa operasi "dasar" untuk memperkirakan nilai dosa, atau apakah itu hanya menarik nilai dari memori?

zack1544
sumber
10
Google "CORDIC". Google "seri Taylor". Dan pikiran Anda tentang ingatan tidak jelas.
Eugene Sh.
8
Metode "memori" adalah teknik optimisasi, yang sering digunakan (namanya "tabel pencarian"). Tapi tidak, awalnya komputer tidak memilikinya. Tetapi jika Anda pernah berkeliaran tentang bagaimana komputer menghitung <placeholder>, google " <placeholder>algoritma perhitungan". Ini bekerja lebih baik daripada bertanya pada SE dalam banyak kasus ..
Eugene Sh.
5
Selain CORDIC dan Taylors, pastikan Anda juga mencari Chebyshev yang digabungkan dengan teknik minimax non-linear. Taylor membatasi kesalahan rata-rata , sementara Chebyshev membatasi kesalahan maksimal dan juga lebih cepat. Minimax diperlukan karena konstanta tidak tepat dan operasi juga tidak terbatas. Dan Anda perlu mengeksploitasi simetri, seperti orang gila!
Jonk
3
Apakah Anda sadar bahwa ada rangkaian yang dapat digunakan untuk menghitung dosa sama seperti ada untuk cos, log, eksponen, pi, akar kuadrat dll.
Andy alias
2
Tentu saja Anda dapat memiliki konten dalam memori komputer "sejak awal" - bagaimana menurut Anda komputer bisa boot? Nilai awal dapat ditransfer ke sirkuit, dibangun ke sel memori hanya baca atau lapisan metalized dari ic, dibakar menjadi sekering, disimpan sebagai muatan terperangkap serta dibaca dari disk, punch tape, atau sakelar sakelar - metode apa pun yang dapat digunakan untuk perangkat lunak pada prinsipnya berguna untuk tabel yang dikomputasi juga, dan pada kenyataannya banyak algoritma membutuhkan berbagai konstanta. Apa yang terbaik benar-benar harus diputuskan berdasarkan persyaratan, teknologi, dan bahkan sumber daya apa yang tersisa setelah kebutuhan lain.
Chris Stratton

Jawaban:

30

Biasanya fungsi resolusi tinggi dosa (x) akan diimplementasikan dengan algoritma CORDIC (COrdiate Rotation DIgital Computer), yang dapat diselesaikan dengan sejumlah kecil iterasi dengan hanya menggeser dan menambah / mengurangi dan tabel pencarian kecil. The kertas asli yang CORDIC Computing Teknik oleh Jack Volder adalah dari 1959. Ia juga bekerja dengan baik ketika diimplementasikan dengan perangkat keras dalam FPGA (dan algoritma yang sama akan dilaksanakan dalam FPU hardware bagi mereka mikro yang memiliki FPU).

Untuk resolusi yang lebih rendah, misalnya untuk membuat gelombang sinus yang disintesis untuk inverter atau motor PKS (Variable Frequency Drive), tabel pencarian (LUT) dengan atau tanpa interpolasi bekerja dengan baik. Ini hanya diperlukan untuk menyimpan nilai-nilai untuk satu kuadran dari gelombang sinus karena simetri.

Seperti yang ditunjukkan oleh @Temlib, algoritma yang digunakan di dalam FPU modern menggunakan pengurangan rentang yang diikuti oleh evaluasi menggunakan sesuatu seperti algoritma Remez untuk membatasi kesalahan absolut maksimum. Lebih banyak dapat ditemukan dalam makalah Intel ini. Verifikasi formal fungsi trigonometri titik mengambang .

Spehro Pefhany
sumber
2
CORDIC bukan untuk konversi fungsi tetap perangkat keras murni (aplikasi historis pertama). Untuk komputer dengan FPU, perkiraan polinom lebih cepat dan lebih cocok karena mereka menggunakan kembali operator aritmatika yang ada daripada mesin shift-and-add CORDIC khusus.
TEMLIB
1
@TEMLIB Ya, itu poin yang valid, saya akan menambahkan itu ke jawabannya. CORDIC juga digunakan dalam kalkulator ilmiah pertama, seperti HP-35.
Spehro Pefhany
Sepengetahuan saya, CORDIC memiliki implementasi perangkat keras pertama di kalkulator meja HP ​​9100A. Itu memiliki kartu sirkuit cetak sekitar satu meter persegi, ditutupi dengan dioda, yang berfungsi sebagai ROM menyimpan parameter yang digunakan oleh algoritma CORDIC.
Hot Licks
@HotLicks - Anda salah, CORDIC dikembangkan untuk dan digunakan dalam komputer navigasi dalam penerbangan hampir sepuluh tahun sebelum HP 9100A.
Chris Stratton
@ ChrisStratton - Saya berdiri dikoreksi.
Hot Licks
14

Sebagian besar perpustakaan trigonometri komputer didasarkan pada perkiraan polinomial , yang memberikan keseimbangan terbaik antara kecepatan dan akurasi. Sebagai contoh, selusin atau lebih operasi multiplikasi dan penambahan / pengurangan cukup untuk memberikan akurasi presisi tunggal penuh untuk sinus dan kosinus.

Dave Tweed
sumber