In che modo i computer calcolano i valori sin? [chiuso]


28

Come fa un computer a calcolare un valore sin? Logicamente, quando ci penso, l'unico modo apparente è quello di mettere in memoria molti valori di peccato, e quando un valore di peccato deve essere "calcolato", estrarrebbe semplicemente i dati da un indirizzo di memoria specifico. (Es. Sin (x) estrarre i dati dall'indirizzo di memoria contenente il valore di sin (x)) Sembra l'unico modo possibile per farlo. Oppure esiste una funzione che può essere utilizzata per calcolare il peccato di un valore? Sto davvero cercando di chiedere come un computer calcola il peccato a livello di base. C'è un modo per approssimare i valori del peccato usando una diversa funzione composta da più operazioni "di base", e l'ALU sarebbe in grado di fare più operazioni "di base" per approssimare il valore del peccato, o sta semplicemente estraendo valori dalla memoria?


10
Google "CORDIC". Google "serie Taylor". E i tuoi pensieri sulla memoria non sono chiari.
Eugene Sh.

8
Il metodo "memory" è una tecnica di ottimizzazione, usata frequentemente (il nome è "tabella di ricerca"). Ma no, inizialmente il computer non ce l'ha. Ma se sei mai in giro su come calcola il computer <placeholder>, google " <placeholder>algoritmo di calcolo". Funziona meglio che chiedere su SE nella maggior parte dei casi ..
Eugene Sh.

5
Oltre a CORDIC e Taylors, assicurati di cercare anche Chebyshev abbinato a tecniche non lineari minimax. Taylor limita l' errore medio , mentre Chebyshev limita l' errore massimo e si chiude anche più velocemente. Minimax è necessario perché le costanti non sono infinitamente precise e nemmeno le operazioni. E devi sfruttare le simmetrie, come un matto!
Jon

3
Sei a conoscenza del fatto che esiste una serie che può essere utilizzata per calcolare il peccato proprio come per cos, i log, gli esponenti, i pi, le radici quadrate ecc.
Andy aka

2
Ovviamente puoi avere contenuti nella memoria del computer "in primo luogo" - come pensi che i computer si avviano? I valori iniziali possono essere cablati in un circuito, integrati in celle di memoria di sola lettura o negli strati di metallizzazione di un ic, bruciati in fusibili, memorizzati come carica intrappolata e letti da disco, punch tape o interruttori a levetta - qualsiasi metodo utilizzabile per il software è in linea di principio utile anche per le tabelle pre-calcolate, e in effetti molti algoritmi necessitano di varie costanti. Ciò che è meglio deve davvero essere deciso in base ai requisiti, alla tecnologia e persino alle risorse rimaste dopo altre esigenze.
Chris Stratton,

Risposte:


30

Le funzioni sin (x) in genere ad alta risoluzione sarebbero implementate con un algoritmo CORDIC (COrdiate Rotation DIgital Computer), che può essere realizzato con un piccolo numero di iterazioni usando solo turni e aggiungi / sottrarre e una piccola tabella di ricerca. L' articolo originale The CORDIC Computing Technique di Jack Volder è del 1959. Funziona bene anche se implementato con hardware in un FPGA (e un algoritmo simile verrebbe implementato in un FPU hardware per quei micro che hanno un FPU).

Per una risoluzione inferiore, ad esempio per creare un'onda sinusoidale sintetizzata per un VFD (variatore di frequenza variabile) di un inverter o motore, una tabella di ricerca (LUT) con o senza interpolazione funziona bene. È solo necessario memorizzare i valori per un quadrante dell'onda sinusoidale a causa della simmetria.

Come sottolinea @Temlib, gli algoritmi utilizzati nelle FPU moderne utilizzano la riduzione della portata seguita da una valutazione che utilizza qualcosa come l' algoritmo Remez per limitare il massimo errore assoluto. Maggiori informazioni sono disponibili in questo documento Intel Verifica formale delle funzioni trigonometriche in virgola mobile .


2
CORDIC è piuttosto per una conversione a funzione fissa hardware puro (la sua prima applicazione storica). Per un computer con una FPU, le approssimazioni polinomiali sono più veloci e più adatte in quanto riutilizzano gli operatori aritmetici esistenti invece di una speciale macchina MAIUSC di tipo shift-and-add.
TEMLIB,

1
@TEMLIB Sì, questo è un punto valido, lo aggiungerò alla risposta. CORDIC è stato utilizzato anche nei primi calcolatori scientifici, come l'HP-35.
Spehro Pefhany,

Per quanto ne so, CORDIC ha avuto la sua prima implementazione hardware nel calcolatore da scrivania HP 9100A. Aveva una scheda a circuito stampato attorno a un quadrato di piedi, coperta di diodi, che serviva da ROM per la memorizzazione dei parametri utilizzati dagli algoritmi CORDIC.
Hot Licks

@HotLicks: sarebbe errato, CORDIC è stato sviluppato e utilizzato in un computer di navigazione in volo quasi dieci anni prima dell'HP 9100A.
Chris Stratton,

@ChrisStratton - Sono corretto.
Hot Licks

14

La maggior parte delle librerie di trigeneri per computer si basano su approssimazioni polinomiali , che offrono il miglior equilibrio tra velocità e precisione. Ad esempio, una dozzina di operazioni di moltiplicazione e aggiunta / sottrazione sono sufficienti per fornire la massima precisione a precisione singola per seno e coseno.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.