From: Stephen Hemminger <[EMAIL PROTECTED]> Date: Mon, 12 Dec 2005 12:03:22 -0800
> - d32 = d32 / HZ; > - > /* (wmax-cwnd) * (srtt>>3 / HZ) / c * 2^(3*bictcp_HZ) */ > - d64 = (d64 * dist * d32) >> (count+3-BICTCP_HZ); > - > - /* cubic root */ > - d64 = cubic_root(d64); > - > - result = (u32)d64; > - return result; > + return cubic_root((cube_factor * dist) >> (cube_scale + 3 - BICTCP_HZ)); ... > + while ( !(d32 & 0x80000000) && (cube_scale < BICTCP_HZ)){ > + d32 = d32 << 1; > + ++cube_scale; > + } > + cube_factor = d64 * d32 / HZ; > + I don't think this transformation is equivalent. In the old code only the "d32" is scaled by HZ. So in the old code we're saying something like: d64 = (d64 * dist * (d32 / HZ)) >> (count + 3 - BICTCP_HZ); whereas the new code looks like: d64 = (((d64 * d32) / HZ) * dist) >> (count + 3 - BICTCP_HZ); Is that really equivalent? - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html