Recientemente me encontré con un problema que podría resolverse fácilmente usando la división de módulo, pero la entrada era un flotador:
Dada una función periódica (p
sin. Ej. ) Y una función de computadora que solo puede calcularla dentro del rango del período (p. Ej. [-Π, π]), cree una función que pueda manejar cualquier entrada.
La solución "obvia" es algo como:
#include <cmath>
float sin(float x){
return limited_sin((x + M_PI) % (2 *M_PI) - M_PI);
}
¿Por qué no funciona esto? Me sale este error:
error: invalid operands of types double and double to binary operator %
Curiosamente, funciona en Python:
def sin(x):
return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)
sin(x)valores grandes de enxrealidad requiere un proceso de reducción de argumentos trascendentales muy difícil que no puede funcionar con ninguna aproximación finita de pi.