Як комп'ютери обчислюють значення гріха? [зачинено]


28

Як комп’ютер обчислює значення гріха? Логічно, коли я думаю про це, єдиний очевидний спосіб - це помістити в пам'ять багато значень гріха, і коли значення гріха потрібно "обчислити", воно просто витягне дані з конкретної адреси пам'яті. (Наприклад, sin (x) витягніть дані з адреси пам'яті, що містять значення sin (x)) Це здається єдиним можливим способом зробити це. Або є функція, яка може бути використана для обчислення гріха значення? Я справді намагаюся запитати, як комп’ютер обчислює гріх на базовому рівні. Чи є спосіб наблизити значення sin за допомогою іншої функції, що складається з більш "базових" операцій, і ALU зможе зробити кілька "базових" операцій для наближення значення sin, або це просто витягування значень із пам'яті?


10
Google "CORDIC". Google "Серія Тейлора". І ваші думки про пам’ять не зрозумілі.
Євген Ш.

8
Метод "пам'яті" - це метод оптимізації, який часто використовується (назва - "таблиця пошуку"). Але ні, спочатку комп’ютер цього не має. Але якщо ви коли-небудь блукаєте про те, як обчислює комп'ютер <placeholder>, google " <placeholder>алгоритм розрахунку". Працює краще, ніж запитувати в SE в більшості випадків ..
Євген Ш.

5
Окрім CORDIC та Taylors ', переконайтесь, що ви також шукаєте Чебишева в поєднанні з нелінійними методами minimax. Середні межі Тейлора помилку, а Чебишев - максимальну помилку і швидше закривається. Minimax потрібен, оскільки константи не є нескінченно точними і не є операціями. І вам потрібно використовувати симетрії, як божевільні!
jonk

3
Чи знаєте ви, що існує серія, яку можна використати для обчислення гріха так само, як це є для cos, журналів, експонентів, pi, квадратних коренів тощо
Andy aka

2
Звичайно, ви можете мати вміст у пам'яті комп'ютера "в першу чергу" - як ви думаєте, чи завантажуються комп'ютери? Початкові значення можуть бути підключені до ланцюга, вбудовані в клітинки лише для читання або металізаційні шари льоду, спалені в запобіжники, збережені як захоплений заряд, а також зчитуються з диска, ударної стрічки або тумблерів - будь-який метод, корисний для програмного забезпечення в принципі також корисний і для попередньо обчислених таблиць, і насправді багато алгоритму потребують різних констант. Що найкраще насправді має вирішуватись виходячи з вимог, технології та навіть того, що залишиться після інших потреб.
Кріс Страттон

Відповіді:


30

Зазвичай функції високої роздільної здатності sin (x) будуть реалізовані за допомогою алгоритму CORDIC (COrdiate Rotation DIgital Computer), який можна виконати з невеликою кількістю ітерацій, використовуючи лише зрушення, додавання / віднімання та невелику таблицю пошуку. Оригінальний документ CORDIC обчислювальна техніка Джек Volder від 1959 г. Він також добре працює , коли реалізований з апаратними засобами в FPGA (і аналогічний алгоритм буде реалізований в апаратній FPU для тих тисячних , які мають FPU).

Наприклад, для нижчої роздільної здатності, наприклад, для створення синтезованої синусоїди для інвертора або двигуна VFD (пристрій змінної частоти), добре працює таблиця пошуку (LUT) з інтерполяцією або без неї. Зберігати значення потрібно лише для одного квадранта синусоїди через симетрію.

Як вказує @Temlib, алгоритми, які використовуються у сучасних ПЗУ, використовують зменшення діапазону з подальшим оцінкою, використовуючи щось подібне до алгоритму Remez для обмеження максимальної абсолютної помилки. Більше можна знайти в цій статті Intel Формальна перевірка тригонометричних функцій з плаваючою комою .


2
CORDIC - це швидше перетворення функціональної функції з фіксованою функцією (його перше історичне застосування). Для комп'ютера з FPU наближення поліномів є більш швидкими та більш підходящими, оскільки вони використовують повторно існуючі арифметичні оператори замість спеціальної машини CORDIC "Shift and add".
ТЕМЛІБ

1
@TEMLIB Так, це правильний пункт, я додам це до відповіді. CORDIC використовувався і в перших наукових калькуляторах, таких як HP-35.
Spehro Pefhany

Наскільки мені відомо, компанія CORDIC мала першу апаратну реалізацію в настільному калькуляторі HP 9100A. Він мав друковану плату на площі стопи, вкриту діодами, яка служила ПЗУ, що зберігала параметри, що використовуються алгоритмами CORDIC.
Гарячі лизання

@HotLicks - ви не помилитесь, CORDIC був розроблений та використаний у польотному навігаційному комп’ютері майже за десять років до HP 9100A.
Кріс Страттон

@ChrisStratton - я виправлений.
Гарячі лизання

14

Більшість комп'ютерних триггерних бібліотек засновані на поліноміальних наближеннях , що дає найкращий баланс між швидкістю точності. Наприклад, операцій з множенням і відніманням / відніманням десятка достатньо, щоб дати повну одноточну точність для синуса і косинуса.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.