• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    4年前 (2014-10-04)  技巧 |   抢沙发  16 
    文章评分 0 次,平均分 0.0
    z_int32 nearZ = 0;  
    for( z_int32 j = 0; j < sw; j++, alpha -= z_pi_f )  
    {  
        if( alpha < NEARZERO && alpha > -NEARZERO ) nearZ = j;  
        else if( j & 1 ) sum -= horz[j] / alpha;  
        else sum += horz[j] / alpha;  
    }  

    此代码有几个条件,一个是位于0附近的特殊处理,另外是循环变量的奇偶判断。
    耗时:1312.68457 ms

    将if拆成更多的for,减少for循环的分支预测:

    z_float32 alpha2 = alpha1 - z_pi_f;  
    z_int32 j;  
    for( j = 0; alpha1 > z_pi_f; j+=2, alpha1 -= z_2pi_f) sum += horz[j] / alpha1;  
    if( alpha1 > -NEARZERO && alpha1 < NEARZERO ){ nearZ = j; j += 2; alpha1 -= z_2pi_f; }  
    for( ; j < sw; j+=2, alpha1 -= z_2pi_f ) sum += horz[j] / alpha1;  
      
    for( j = 1; alpha2 > z_pi_f; j+=2, alpha2 -= z_2pi_f) sum -= horz[j] / alpha2;  
    if( alpha2 > -NEARZERO && alpha2 < NEARZERO ){ nearZ = j; j += 2; alpha2 -= z_2pi_f; }  
    for( ; j < sw; j+=2, alpha2 -= z_2pi_f ) sum -= horz[j] / alpha2;  

    先拆奇偶,然后拆0附近的循环,这样下来的效果是
    耗时:918.65375 ms

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/3757.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享