2012-06-17 12 views
6

Nella C99 spec dice di remquo:remquo: riduzione argomento?

Le funzioni remquo sono destinati ad attuare riduzioni argomenti che possono sfruttare alcuni bit di ordine basso quoziente. Si noti che x può essere di ampiezza relativamente grande rispetto a y che una rappresentazione esatta del quoziente non è pratica.

Che cos'è una "riduzione dell'argomento" in questo contesto e qual è un esempio di uno che può sfruttare alcuni bit di basso livello del quoziente?

+0

Sembra avere a che fare con il calcolo efficiente delle funzioni trascendentali numericamente "riducendo" l'argomento in un intervallo più piccolo e utilizzando le ricerche e l'interpolazione. Vedi [questi] (http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.123.9012&rep=rep1&type=pdf) [two] (http://www.imada.sdu.dk/~ kornerup/papers/RR2.pdf) documenti. –

risposta

7

Riduzione degli argomenti significa mappare l'argomento di una funzione periodica nel periodo canonico (ad esempio, (-π, π] o simile). Se si utilizza π/2 come divisore, i bit bassi del quoziente sarebbero sufficiente per determinare il segno destra/etc per funzioni trigonometriche

Purtroppo, però, remquo è inutile per standard di attuazione riduzione argomento trigonometrica, perché π è irrazionale.. riducenti grandi argomenti modulo un ravvicinamento di π vi darà risultati con bit significativi, ovvero tutti gli errori

Se si sta scrivendo una funzione f(x) definita come sin (πx) o simile, il punto è ora esattamente rappresentabile in virgola mobile e remquo può fare esattamente ciò che è necessario, mentre chiamare direttamente sin(2*M_PI*x) darà risultati senza bit significativi (vale a dire tutti gli errori) quando x è grande.

+2

Per essere chiari, le opportune implementazioni di remquo restituiscono risultati esatti (senza errori) dati gli argomenti passati. La ragione per cui è di uso limitato nel ridurre gli argomenti trigonometrici è che è impossibile passarlo il valore di π più precisamente di quanto possa essere rappresentato in un doppio (o in un lungo doppio per remquol). Quindi il problema è sull'input, non sul calcolo della funzione. –

+0

In effetti, non è un bug nel modo in cui funziona la funzione; è una limitazione fondamentale nell'interfaccia che lo rende inutile per le funzioni trigonometriche standard. –