Se a qualcuno interessasse, ecco qui un algoritmo per ricondurre un numero all'intervallo `(-a;a]` (lo pubblico solo perché a me a fatto penare più del previsto, probabilmente per via di errori delle mie verifiche a mano).
Un numero `x` qualsiasi può essere scritto come
`x=\alpha + m2a`
dove `m` è un numero intero, e `\alpha` non è divisibile per `2a`. Ora, noi vogliamo che, dato un valore di `x`, si ottenga un valore per `\alpha` compreso nell'intervallo desiderato.
Non possiamo, semplicemente, calcolare il resto di `x/{2a}`, perché ci accorgiamo facilmente che i valori assunti sarebbero compresi tra `0` e `2a`. Ci riconduciamo, allora, facilmente (dillo al C!), all'intervallo di nostro interesse, osservando che, se cambiamo `x\to x+b` ed al risultato finale sottraiamo `b`, l'intervallo è quello di nostro interesse e salviamo la consistenza dei risultati (ossia, i valori tra `-b` e `b` rimangono invariati).
Ora, potrei anche scrivere il procedimento matematico che ho descritto, ma visto che il nostro interesse è rivolto esclusivamente ad implementare questa operazione in un codice C, tanto vale scriverlo direttamente, ricordando che, quando si tratta di numeri non interi, la funzione che restituisce il resto è fmod(x,y). Pertanto, scriviamo 'sta funzione:
double alpha(double x, double a) {
return((fmod((x+a),2*a)-a);
}
2 commenti:
Però bisogna ammettere che quando, dopo tanto penare, si arriva ad una conclusione, ci si sente tanto realizzati.
No?
Io so solo che, dopo aver buttato ore a buttare conti su tutta la carta che avevo, ho scritto una riga addirittura su excel (perché ero ad un computer senza compilatore), e tutto funzionava, mi sono sentito un idiota totale.
Posta un commento