giovedì 8 maggio 2008

Possibile metterci metà mattina?

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:

tilde ha detto...

Però bisogna ammettere che quando, dopo tanto penare, si arriva ad una conclusione, ci si sente tanto realizzati.


No?

Cassa ha detto...

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.