简单的一个函数的优化

Yofoo 2010-03-11 09:25:30

int GetNear(int l, int r, int v)
{
if(abs(v-l) < abs(v-r))
return l;

return r;
}


以上代码是从两个数l, r中找出与v最近的一个数, 希望能优化...
...全文
175 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwxhb 2010-03-11
  • 打赏
  • 举报
回复
.............
dubiousway 2010-03-11
  • 打赏
  • 举报
回复
inline int GetNear(int l, int r, int v)
dubiousway 2010-03-11
  • 打赏
  • 举报
回复
莫忘了 inline:

int    GetNear(int l, int r, int v)


haha
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
楼主代码中,两个abs各有一个if跳转,再加上本身一个,一共三个。

引用 14 楼 sigoyi 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:C/C++ codeint GetNear(int a,int b,int v) {int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv; }

我也是凑个热闹,不图别地,图个学。你说的三个if是为什么?能不能给解释一下,学生头脑简单不明白你说的三个if指的是什么?
WizardK 2010-03-11
  • 打赏
  • 举报
回复
引用 10 楼 liumenghappy 的回复:
C/C++ codeint GetNear(int l,int r,int v)
{if((v-l)*(v-l)< (v-r)*(v-r))return l;return r;
}
我乱写的,不知道取绝对值和平方哪个快些


当然是加减运算最快,一次乘等于N次加,LZ别折磨我们了。。。
SiGoYi 2010-03-11
  • 打赏
  • 举报
回复
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:C/C++ codeint GetNear(int a,int b,int v) {int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv; }


我也是凑个热闹,不图别地,图个学。你说的三个if是为什么?能不能给解释一下,学生头脑简单不明白你说的三个if指的是什么?
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
我没有好想法。

引用 12 楼 wizardk 的回复:
引用 11 楼 m_s_d_n 的回复:
你比楼主的代码还多了个除法,虽然这个除法应该会被优化。

引用 9 楼 wizardk 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}

唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹

是的,都说了,凑热闹,你有什么好想法说说呗
WizardK 2010-03-11
  • 打赏
  • 举报
回复
引用 11 楼 m_s_d_n 的回复:
你比楼主的代码还多了个除法,虽然这个除法应该会被优化。

引用 9 楼 wizardk 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}

唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹


是的,都说了,凑热闹,你有什么好想法说说呗
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
你比楼主的代码还多了个除法,虽然这个除法应该会被优化。

引用 9 楼 wizardk 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}

唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹
liumenghappy 2010-03-11
  • 打赏
  • 举报
回复

int GetNear(int l, int r, int v)
{ if((v-l)*(v-l) < (v-r)*(v-r))
return l;
return r;
}

我乱写的,不知道取绝对值和平方哪个快些
WizardK 2010-03-11
  • 打赏
  • 举报
回复
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}


唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}
SiGoYi 2010-03-11
  • 打赏
  • 举报
回复
int GetNear(int l, int r, int v)
{
return abs(v-l) < abs(v-r)? l : r;
}
bragi523 2010-03-11
  • 打赏
  • 举报
回复
已经很简了吧
SiGoYi 2010-03-11
  • 打赏
  • 举报
回复
LZ的方法已经很优化了。
SuperLy 2010-03-11
  • 打赏
  • 举报
回复
int GetNear(int l, int r, int v)
{
if(v*2<(l+r))
return l;

return r;
}
WizardK 2010-03-11
  • 打赏
  • 举报
回复

int GetNear(int a, int b, int v)
{
int maxv = max(a, b);
int minv = min(a, b);

return (maxv - minv) / 2) > v ? minv : maxv;
}
jiuchang 2010-03-11
  • 打赏
  • 举报
回复
1楼不对吧,没有说三个参数的大小关系啊
jieleiping 2010-03-11
  • 打赏
  • 举报
回复

int GetNear(int l, int r, int v)
{
if(v<((l+r)/2))
return l;

return r;
}

jiuchang 2010-03-11
  • 打赏
  • 举报
回复
a < v, b < v return a < b ? b : a
a > v, b > v return a < b ? a : b
a < v, b > v return v-a < b-v ? a: b
a > v, b < v return a-v < v-b ? a : b

前两种情况不需要做减法运算,可以优化掉
加载更多回复(3)

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧