erlug
[Top] [All Lists]

Re: [Erlug] kernel, demoni e float: come non laurearsi

To: erlug@xxxxxxxxxxxxxx, Michele Mordenti <michele.mordenti@xxxxxx>
Subject: Re: [Erlug] kernel, demoni e float: come non laurearsi
From: Daniele Lacamera <mlists@xxxxxxxxxxxxxx>
Date: Mon, 27 Dec 2004 21:51:42 +0100
On Wednesday 22 December 2004 15:43, Michele Mordenti wrote:
> Per la mia tesi sto' lavorando al router software click 
> (http://www.pdos.lcs.mit.edu/click/);dovrei implementare dei moduli 
per 
> la qualita' di servizio e mi servirebbe una funzione che mi 
restituisse 
> il logaritmo per l'aggiornamento dell'allocazione di banda.
> 
> Per avere buone prestazioni il tutto gira in kernel space, quindi 
> purtroppo non ho ne' la cmath.h ne' le variabili float. Per il 
> logaritmo ho provveduto con lo sviluppo in serie di taylor, ma non 
> posso fare a meno delle variabili float.
[..]
> 
> Idee?
> Suggerimenti?

Ho avuto un problema simile nella mia tesi di laurea.
Nel protocollo TCP dovevo esprimere una variabile (rho) come una 
frazione del RTT, e quindi ho utilizzato un unsigned long tenendo conto 
dei centoventottesimi del valore. Ad esempio se rho era 0.5 usavo 64.

Suppongo non so per quale motivo che tu possa fare un bagaglio simile 
sfruttando le proprieta` dei logaritmi e gli sviluppi in serie di 
taylor.

Brevemente:
Dovendo calcolare con precisione il risultato di 2^(rho+1)
ho pensato di dividere il valore di rho nella somma della sua parte 
intera con la sua parte frazionaria, trasformando:
 2^rho = 2^(rhoi + rhof) = 2^(rhoi) + 2^(rhof)
ed effettuando 2^rhoi con un semplice bit-shifting.
2^(rhof) puo` assumere un numero finito di valori, ad esempio se rhof e` 
approssimato agli ottavi i valori che puo` assumere sono 
2^(0),2^(1/8),...,2^(7/8). Ho precalcolato questi otto valori e li ho 
messi in una funzione che ne restituisce il valore a seconda di rhof.

Trovi tutto piu` in dettaglio nella mia tesi
http://www.danielinux.net/projects/tesi.pdf
descrizione pagg. 52-54 
e codice in appendice pagg. 89-90

HTH 


-- 
Daniele Lacamera
root at danielinux.net

<Prev in Thread] Current Thread [Next in Thread>