6楼的想**很慢的哦

[复制链接]
2449|10
 楼主| ayb_ice 发表于 2008-12-4 22:15 | 显示全部楼层 |阅读模式
有三个变量x,y,z,用最快的方法找出中间值的变量,主要用于滤波.
ljm810010 发表于 2008-12-4 22:29 | 显示全部楼层

数据位长?C or ASM ? CPU type?

xhtxzxw 发表于 2008-12-4 23:22 | 显示全部楼层

嘿嘿

unsigned int Middle(unsigned int x, y, z)
{
    return (x>=y)? ((y>=z)? y:((x>=z)? z:x))  :  ((x>=z)? x:((y>=z)? z:y));
}

//最多做三次比较操作,就可以了.看不清楚的话,看下面展开的格式.
unsigned int Middle(unsigned int x, y, z)
{
    if(x >= y)
    {
        if(y >= z)  return(y);
        else
        {        
            if(x >= z) return(z);
            else       return(x);
        }
    }
    else
    {
        if(x >= z)  return(x);
        else        
        {
            if(y >= z) return(z);
            else       return(y);
        }
    }
}


ejack 发表于 2008-12-5 07:53 | 显示全部楼层

3楼的确是放之四海而皆准的代码,换句话说,没有任何实际

ljm810010 发表于 2008-12-5 09:53 | 显示全部楼层

是我目前见到最快的代码,同时也是最慢的代码^_^

 楼主| ayb_ice 发表于 2008-12-5 21:15 | 显示全部楼层

感谢各位支持

今天自己写了个代码,和xhtxzxw差不多,只是形式有点不同,我不大喜欢嵌套类型的程序,我把它展成了顺序执行,基本形式如下
char a;
char x,y,z;

a = 0;
if(x>y) a|=1;
if(x>z) a|=2;
if(y>z) a|=4;
switch(a){
// 此处根据a值取值....
}
耕在此行 发表于 2008-12-5 21:37 | 显示全部楼层

我的思路

像类似楼主这样的一般计N个值 再对N个值排序.
取中间N-2个值再求均值.
xhtxzxw 发表于 2008-12-5 21:48 | 显示全部楼层

嘿嘿

//是字节量啊? 还是用这个吧? 快不快,看反汇编就是.包括RET,一共用31条汇编指令.请4楼,5楼给出更好的.
#define uchar unsigned char
uchar Middle(uchar x, uchar y, uchar z)
{
    return (x>=y)? ((y>=z)? y:((x>=z)? z:x))  :  ((x>=z)? x:((y>=z)? z:y));
}
 楼主| ayb_ice 发表于 2008-12-5 22:03 | 显示全部楼层

不是字节变量

这里只是思路,字节变量就是没有什么效率的问题了,我必须在采样下一次数据前搞定这些,否则就没有什么意义,所以想看一下是否有很高效的算法,其实这就也是个冒泡算法,只是数量是3个,冒泡效率反而变低...
ljm810010 发表于 2008-12-5 22:36 | 显示全部楼层

6楼似乎是越搞越复杂了

xwj 发表于 2008-12-5 22:48 | 显示全部楼层

6楼的想**很慢的哦

您需要登录后才可以回帖 登录 | 注册

本版积分规则

222

主题

15494

帖子

34

粉丝
快速回复 在线客服 返回列表 返回顶部