--- Quote Start ---
Thank you kaz !
Do you suggest to add the 16 leading zeros at each multiplication and then taking always the 16 MSbs ?
If don't I suppose that if I want to evaluate x^7 I would have to add much more than 16 bit or I am wrong ?
--- Quote End ---
you remove 16 lsbs from each mult result. thus
x*x means 16bits*16bits => 32 bits, discard 16 lsbs yielding 16 bits result as x^2 (but keep in head that it is x^2/2^16)
now x^2*x is 16bits * 16bits yielding 32 bits, discard 16 lsbs and so on.
The idea is that if you enter in matlab:
x = 25;
y1=x^2+x^3+x^4+x^5+x^6+x^7
= 6357828750
y2= (floor(x^2/2^16)+floor(x^3/2^16)+floor(x^4/2^16)+floor(x^5/2^16)+floor(x^6/2^16)+floor(x^7/2^16))*2^(16) = 6357712896
so at final result from adder insert 16 zeros (in effect we multiply back by the loss). in simple algebra:
x + y = x + y or = (x/2 + y/2)*2