Here's the longer version of the interpretation of the SQRT hack. A positive floating point number in a "hidden bit" system with 8 bits of exponent e and 23 bits of mantissa m is represented by a pair [e,m], which is _usually_ interpreted to mean the number 2^e*(1+m), 0<=m<1. (We ignore the exponent bias, for now.) While that is the usual interpretation, we will instead use a _base-4_ interpretation for our SQRT hack: the high-order _seven_ bits of the exponent becomes our base-4 exponent, and the low order bit of the exponent now becomes the high order bit of the mantissa. The reason for this is that the mantissa is now considered as a 2's complement integer, with the _low order bit of the (binary) exponent becoming the "sign" bit for the mantissa_ ! [2*e'+0,+m] = 4^e'*(1+m) e' integer, 0<=m<1 [2*e'+1,-n] = 4^(e'+1)*(1-n) e' integer, 0<n<=0.5 Here are the representations & interpretations for the first several integers in floating point format: 1 = [00,.0] = [2*0+0,+.0] = 4^0*(1+.0) = 1*1.0 2 = [01,.0] = [2*0+1,-.10] = 4^1*(1-.10) = 4*0.5 3 = [01,.1] = [2*0+1,-.01] = 4^1*(1-.01) = 4*0.75 4 = [10,.00] = [2*1+0,+.00] = 4^1*(1+.00) = 4*1.0 5 = [10,.01] = [2*1+0,+.01] = 4^1*(1+.01) = 4*1.25 6 = [10,.10] = [2*1+0,+.10] = 4^1*(1+.10) = 4*1.5 7 = [10,.11] = [2*1+0,+.11] = 4^1*(1+.11) = 4*1.75 8 = [101,.000] = [2*1+1,-.1000] = 4^2*(1-.1000) = 16*0.5 9 = [101,.001] = [2*1+1,-.0111] = 4^2*(1-.0111) = 16*0.5625 10 = [101,.010] = [2*1+1,-.0110] = 4^2*(1-.0110) = 16*0.625 11 = [101,.011] = [2*1+1,-.0101] = 4^2*(1-.0101) = 16*0.6875 12 = [101,.100] = [2*1+1,-.0100] = 4^2*(1-.0100) = 16*0.75 13 = [101,.101] = [2*1+1,-.0011] = 4^2*(1-.0011) = 16*0.8125 14 = [101,.110] = [2*1+1,-.0010] = 4^2*(1-.0010) = 16*0.875 15 = [101,.111] = [2*1+1,-.0001] = 4^2*(1-.0001) = 16*0.9375 ... Let us now shift the entire word right by one bit, which shifts the low order bit of the original exponent into the high order bit of the mantissa. This accomplishes an "arithmetic" right shift of the mantissa, since the "sign" bit of the mantissa is propagated. Thus, sqrt([2*e'+0,+m]) ~ [e',+m/2] = 2^e'*(1+m/2) sqrt([2*e'+1,-n]) ~ [e',-n/2] = 2^e'*(1-n/2) In both cases, we have the first two terms of the Taylor series approximation to sqrt(1+x) = 1+x/2-x^2/8+x^3/16-... We must now deal with the exponent "bias". We usually don't store the exponent e itself, but store (e+bias), so that 0<=e+bias<2^8. But if we shift (e+bias) to the right by 1, we compute (e+bias)/2=e/2+bias/2. This means that we need to add bias/2 back in order to get e/2+bias/2+bias/2=e/2+bias. This also works when bias is odd, since we are working with a binary number system in which bias/2 can be represented exactly. (Note that since all we are doing is a right shift of the entire floating point number, the process of adding back the bias "commutes" with the process of the shift, assuming that if we add back the bias ahead of the shift, we add back "bias" rather than "bias/2".)