Mi sono imbattuto in un problema: calcolare la radice quadrata di un intero senza utilizzare variabili floating point per motivi di velocità. Mi era sufficiente un risultato troncato e senza resto.
Spero di fare cosa gradita nel postare la funzione che ho scritto e che va aggiungersi alla libreria di quelle di uso generale perché l' esecuzione è molto veloce.
- Codice: Seleziona tutto
// Calcola la radice quadrata di un numero intero senza segno
uint32_t uintSqrt(uint32_t n) __pure
{
uint32_t i,val;
// se n vale 0 ritorna 0
if (!n) return 0;
// calcola il numero di bit di n
i = 0;
val = n;
do
{
val = val >> 1;
if (val) i++;
} while (val);
// assume val come 2^(i/2)
if (!i) val=1; else val = 1 << (i>>1);
// Calcola la radice babilonese.
// 4 passaggi sono sufficienti
for(i=0; i<4; i++) val = (val + n/val) >> 1;
return val;
}
Se provate a fare uintSqrt(4281346624) vi darà come risultato 65432.


Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)






instead of
(Anonimo).
ain't
, right?
in lieu of
.
for
arithm.

