Función sin en C: Conversión de radianes e implementación de funciones propias

1. Fundamentos de la función sin en C

En C, utilizando la biblioteca estándar «math.h», es posible realizar cálculos de funciones trigonométricas. En particular, la «función sin» se utiliza para obtener el seno (sine) de un ángulo. En este artículo, se explica detalladamente cómo usar la función sin en C, sus aplicaciones, y además, cómo implementar una función sin propia.

1.1 ¿Qué es la función sin?

La función sin toma un ángulo en radianes y devuelve el valor del seno de ese ángulo. El radian es una unidad de ángulo basada en la constante π (pi), y para convertir a grados, es necesario realizar una conversión.

2. Lo básico de la biblioteca math.h en C

Para utilizar funciones trigonométricas, se incluye math.h. Esto permite el uso de la función sin y otras funciones matemáticas.
#include 
#include 

int main() {
    double angle = 1.57; // Radio equivalente a 90 grados
    double result = sin(angle);
    printf("sin(1.57) = %f\n", result);
    return 0;
}
En este código, el valor seno de 90 grados (1.57 radianes) se muestra como 1.000000.

2.1 Conversión de grados a radianes

Para convertir grados a radianes, se utiliza la siguiente fórmula.
#define DEG_TO_RAD(deg)  ((deg) / 180.0 * 3.141592653589793)

int main(void) {
    double deg = 90.0;
    double rad = DEG_TO_RAD(deg);
    printf("sin(%f grados) = %f\n", deg, sin(rad));
    return 0;
}
En este programa, se convierte 90 grados a radianes y se ejecuta la función sin con ese valor.
侍エンジニア塾

3. Ejemplo de aplicación: Generación de onda sinusoidal

La onda sinusoidal es una forma de onda comúnmente utilizada en síntesis de sonido y procesamiento de señales. El siguiente código genera una onda sinusoidal y muestra el valor de cada muestra.
#include 
#include 

int main() {
    int samples = 100;
    double frequency = 1.0;
    double amplitude = 1.0;
    double phase = 0.0;
    double sampleRate = 100.0;

    for (int i = 0; i < samples; i++) {
        double t = i / sampleRate;
        double value = amplitude * sin(2 * M_PI * frequency * t + phase);
        printf("Muestra %d: %f\n", i, value);
    }
    return 0;
}
Este programa genera una onda sinusoidal utilizando la frecuencia y la tasa de muestreo especificadas. Los datos generados se pueden utilizar en audio u otros procesos de señales.

4. Implementación de una función sin personalizada: Expansión de Maclaurin

En C, también es posible crear una función sin personalizada. Esto es útil en entornos específicos donde la biblioteca estándar no está disponible o cuando se necesita personalización. La aproximación usando la expansión de Maclaurin es un método para expresar la función sin como un polinomio.

4.1 Función sin por expansión de Maclaurin

La fórmula de aproximación de la función sin usando la expansión de Maclaurin es la siguiente:  sin(x) = x - frac{x^3}{3!} + frac{x^5}{5!} - frac{x^7}{7!} + dots A continuación, se muestra el código en C basado en esta fórmula.
#include 
#include 

double factorial(int n) {
    double result = 1.0;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

double my_sin(double x) {
    double result = 0.0;
    for (int i = 0; i < 10; i++) {  // Calcular hasta 10 términos
        int power = 2 * i + 1;
        double term = pow(x, power) / factorial(power);
        if (i % 2 == 0) {
            result += term;
        } else {
            result -= term;
        }
    }
    return result;
}

int main() {
    double angle = 1.57;
    printf("sen(1.57) = %f\n", my_sin(angle));
    return 0;
}
Este programa calcula la función sin usando la expansión de Maclaurin. La precisión de la aproximación depende del número de términos calculados, y con alrededor de 10 términos se obtiene una precisión suficiente.

5. Errores y puntos de atención

En los cálculos que utilizan números de punto flotante, pueden surgir problemas de precisión al procesar valores muy pequeños o muy grandes. En particular, en la implementación casera de la función sin, a medida que aumenta el número de términos a calcular, también aumenta el costo computacional. Además, en la expansión de Maclaurin, la precisión del cálculo disminuye para ángulos grandes (por ejemplo, cuando excede ±π), por lo que se recomienda normalizar el ángulo en un rango apropiado según sea necesario.

6. Resumen

En este artículo, hemos cubierto desde el uso básico de la función sin en el lenguaje C hasta ejemplos de aplicación, e incluso la implementación de una función sin personalizada. Al aprovechar las funciones trigonométricas en C, es posible aplicarlas en muchos campos como la simulación física y el procesamiento de audio. Además, a través de la función personalizada que utiliza la expansión de Maclaurin, se puede entender más profundamente el mecanismo de la función. Espero que sea útil para los proyectos de los lectores.