Guida alla funzione sin() in C: basi, applicazioni e implementazione personalizzata

1. Nozioni di base della funzione sin in linguaggio C

Nel linguaggio C è possibile eseguire calcoli trigonometrici utilizzando la libreria standard math.h. Tra queste, la funzione sin serve a calcolare il seno di un angolo. In questo articolo spiegheremo in dettaglio come usare la funzione sin in C, le sue applicazioni e come implementare una propria versione della funzione sin.

1.1 Cos’è la funzione sin?

La funzione sin accetta come input un angolo espresso in radianti e restituisce il valore del seno di quell’angolo. Un radiante è un’unità di misura degli angoli basata sulla costante matematica π (pi greco). Per convertire i radianti in gradi, o viceversa, è necessario applicare una formula di conversione.

2. Nozioni di base della libreria math.h in C

Per utilizzare le funzioni trigonometriche, includi math.h. Questo ti permette di usare la funzione sin e altre funzioni matematiche.

#include <stdio.h>
#include <math.h>

int main() {
    double angle = 1.57; // Radians equivalent to 90 degrees
    double result = sin(angle);
    printf("sin(1.57) = %fn", result);
    return 0;
}

In questo codice, il seno di 90 gradi (1,57 radianti) viene stampato come 1.000000.

2.1 Conversione tra gradi e radianti

Per convertire i gradi in radianti, utilizza la seguente formula:

#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 degrees) = %fn", deg, sin(rad));
    return 0;
}

Questo programma converte 90 gradi in radianti e poi utilizza quel valore nella funzione sin.

侍エンジニア塾

3. Esempio di applicazione: generazione di un’onda sinusoidale

Un’onda sinusoidale è una forma d’onda comune usata nella sintesi audio e nell’elaborazione del segnale. Il codice seguente genera un’onda sinusoidale e restituisce il valore di ciascun campione:

#include <stdio.h>
#include <math.h>

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("Sample %d: %fn", i, value);
    }
    return 0;
}

Questo programma genera un’onda sinusoidale usando la frequenza e la frequenza di campionamento specificate. I dati generati possono essere utilizzati in audio o in altre attività di elaborazione del segnale.

4. Implementare la propria funzione sin: serie di Maclaurin

È possibile implementare la propria funzione sin in C. Questo può essere utile quando la libreria standard non è disponibile o quando è necessario un comportamento personalizzato. L’approssimazione tramite serie di Maclaurin esprime la funzione seno come un polinomio.

4.1 Funzione sin usando la serie di Maclaurin

L’approssimazione della serie di Maclaurin per la funzione seno è la seguente:

 sin(x) = x - frac{x^3}{3!} + frac{x^5}{5!} - frac{x^7}{7!} + dots

Ecco un’implementazione in C basata su questa formula:

#include <stdio.h>
#include <math.h>

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++) {  // Calculate up to 10 terms
        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("sin(1.57) = %fn", my_sin(angle));
    return 0;
}

Questo programma calcola la funzione seno usando la serie di Maclaurin. L’accuratezza dipende dal numero di termini calcolati; in genere circa 10 termini sono sufficienti per una buona precisione.

5. Errori e considerazioni

Quando si lavora con numeri in virgola mobile, possono sorgere problemi di precisione quando si trattano valori molto piccoli o molto grandi. In particolare, per le implementazioni personalizzate della funzione sin, aumentare il numero di termini aumenta anche il costo computazionale. Inoltre, con la serie di Maclaurin, l’accuratezza del calcolo diminuisce per angoli grandi (ad esempio, superiori a ±π), quindi è consigliabile normalizzare gli angoli a un intervallo appropriato quando necessario.

6. Riepilogo

In questo articolo, abbiamo coperto le basi dell’uso della funzione sin in C, le applicazioni pratiche e come implementare la propria versione di sin. Utilizzare le funzioni trigonometriche in C consente applicazioni in campi come le simulazioni fisiche e l’elaborazione audio. Implementare la propria funzione con la serie di Maclaurin aiuta anche a comprendere più a fondo come funziona la funzione. Speriamo che questo sia utile nei vostri progetti.

侍エンジニア塾