In realtà c'è una ragione matematica ragionevolmente buona per eseguire la replicazione dei bit:
Prima nota che la stringa n-bit, , rappresenta in realtà il valore e vogliamo produrre la stringa m-bit, , dove e
NN2n- 1Mn<mN2n−1≈M2m−1
Per prima cosa scaliamo numeratore e denominatore con
e questo semplifica a
N.(2n+1)(2n−1)(2n+1)≈M2m−1
N.(2n+1)22n−1≈M2m−1
Nel tuo caso, e e possiamo "fermarci" qui, ma ma il processo può essere ripetuto, (fino alla nausea), se m >> n.n∈{5,6}m=8
Facciamo quindi l'approssimazione ...
che semplifica a
N.(2n+1)22n≈M2m
N.(2n+1)22n−m≈M
Si noti che equivale a ripetere la stringa n-bit, per creare una stringa 2n-bit e la divisione sposta gli LSB per lasciare un risultato M bit.N.(2n+1)2n−m
QED
Naturalmente, il calcolo 'corretto' è ma questa approssimazione, in generale , funziona la maggior parte delle volte. Naturalmente ci sono momenti in cui è impreciso, ma IIRC solo di un bit e relativamente di rado.M=⌊((2m−1)N2n−1+12⌋