3个数字取中函数
本帖最后由 Gen_X 于 2024-8-13 19:47 编辑<p>如图,看到很多关于3个数取中的程序,感觉都有点复杂,不满足本人简单复制黏贴的需要,</p>
<p>所以整理了一个看上去最简明的函数,默认int ,不分类型,直接定义如下:</p>
<p>#define mid3v(a,b,c) (a>b? (a<c? a:(a>c? b:c)):(b<c? b:(b>c? a:c)))</p>
<p>将需要取中的三个值分别付给a、b、c,</p>
<p>调用时只需 Ymid = mid3v(a,b,c)即可。</p>
<p>关键是只有一行代码,便于复制黏贴,</p>
<p>常用于简单快速采样3次取中,然后再加上简单的LAG惯性滤波,即可消除大部分的随机干扰。</p>
<p> </p>
<p>注意:a + b = 1 。LAG计算如下:</p>
<p>Yout = a*x + b*Y0 ;</p>
<p>Y0 = Yout ;</p>
<p>end;</p>
<p>用宏定义实现,是不是会比函数实现效率高一些?</p>
<p>那要是是一个取中呢?其实主要还是数少,基本上都得来一遍遍历</p>
本帖最后由 Gen_X 于 2024-8-15 08:55 编辑
<p>我说的仅仅是3个数的取中。多于三个的就不是这个函数!</p>
<p>关键是只有三个,做个很大的函数,使用不变。</p>
本帖最后由 Gen_X 于 2024-8-15 08:56 编辑
<p>仅仅是个人使用经验的分享,类似的函数还有:</p>
<p>限幅函数</p>
<p>#define Limit(x, min, max) (x)=(((x)<=(min))?(min):(((x)>=(max))?(max):(x)))</p>
<p>最大值</p>
<p>#define max3v(v1, v2, v3) ((v1)<(v2)? ((v2)<(v3)?(v3):(v2)):((v1)<(v3)?(v3):(v1)))</p>
<p>最小值</p>
<p>#define min3v(v1, v2, v3) ((v1)>(v2)? ((v2)>(v3)?(v3):(v2)):((v1)>(v3)?(v3):(v1)))</p>
<p>个人感觉使用非常方便,甚至都是抄来的,也感谢那些无私“开源”的高手。</p>
<p>给你们点赞!</p>
<p>这个分享的意义仅在于:</p>
<p>复制——粘贴——使用,小巧方便、不需要定义变量。</p>
wangerxian 发表于 2024-8-14 09:16
用宏定义实现,是不是会比函数实现效率高一些?
<p>我感觉宏定义也省略了数据类型的定义,使用更灵活。</p>
Gen_X 发表于 2024-8-15 08:59
我感觉宏定义也省略了数据类型的定义,使用更灵活。
<p>确实也是,不用定义数据类型。</p>
<p>哈哈哈。。。。小技巧,使用起来方便就好。。。。。。随便怎样都行</p>
<p>其实没必要写这么紧凑吧,内部还是会换成if else。</p>
页:
[1]