2012-06-17 13 views
6

En el C99 Spec se dice de remquo:remquo: reducción de argumento?

Las funciones remquo están destinados a implementar la reducción de los argumentos que se pueden explotar unos pocos bits de orden inferior del cociente. Tenga en cuenta que x puede ser tan grande en magnitud relativa a y que una representación exacta del cociente no es práctica.

¿Qué es una "reducción de argumento" en este contexto, y qué es un ejemplo de uno que puede explotar algunos bits de bajo orden del cociente?

+0

Parece que tiene que ver con el cálculo eficiente de las funciones trascendentales numéricamente al "reducir" el argumento en un rango más pequeño y al utilizar búsquedas e interpolación. Ver [estos] (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) papers. –

Respuesta

7

Argumento de reducción significa mapear el argumento de una función periódica en el período canónico (por ejemplo, (-π, π) o similar). Si utilizó π/2 como divisor, los bits bajos del cociente serían suficiente para determinar el signo correcto/etc para las funciones trigonométricas

Desafortunadamente, sin embargo, remquo es inútil para la aplicación de la reducción norma argumento trigonométrica, porque π es irracional;.. reductoras grandes argumentos modulo un aproximación de π le dará resultados con sin bits significativos, es decir, todos los errores

Sin embargo, si está escribiendo una función f(x) definida como sin (πx) o similar, el período ahora es exactamente representable en coma flotante y remquo puede hacer exactamente lo que necesita, mientras que llamar directamente al sin(2*M_PI*x) dará resultados sin bits significativos (es decir todo error) cuando x es grande.

+2

Para ser claros, una implementación de remquo adecuada devuelve resultados exactos (sin error) dados los argumentos que se pasan. La razón por la cual es de uso limitado para reducir los argumentos trigonométricos es que es imposible pasarle el valor de π más precisamente de lo que se puede representar en un doble (o en un doble largo para remquol). Entonces el problema está en la entrada, no en el cálculo de la función. –

+0

De hecho, no es un error en la forma en que funciona la función; es una limitación fundamental en la interfaz que lo hace inútil para las funciones trigonométricas estándar. –