编程算法

求一个最大值x, 分为n 个以指数增加的数列

(x^(1/(n-1)) ^ n
如:最大值1000,20个数
(1000^(1/19)) ^ n
n=0~19

将以min to max的整数值域转成0~100 百分比数值

min : 设定的最小值
max :设定的最大值
cur :当前值,值域[min , max]
temp:转换后的0~100 百分比数值,cur == min 时 temp = 0; cur == max 时 temp = 100;

temp = ((cur-min)*100)/(max - min)

判断闰年:

1.能被4整除但不能被100整除。
2.能被400整除。

if ( (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0 ) ) {
    // 是闰年
} else {
    //不是闰年
}

球形体积公式:4/3 * PI *r^3

double volume = 4.0/3.0 * PI * r * r * r;

C语言快速取以2为底的对数的方法:

int FastLog2(int x)
{
    float fx;
    unsigned long ix, exp;

    fx = (float)x;
    ix = *(unsigned long*)&fx;
    exp = (ix >> 23) & 0xFF;

    return exp - 127;
}

求n的阶和公式

(n+1)*(n/2)

滤波算法

均值滤波算法
U8 AverageFilter(void)
{
    U32 u32Temp=0;
    int i=0;
    // Average filter
    for (i = 0; i < BAT_ADC_VAL_EQ_NUM; i++)
    {
        u32Temp += MDrv_SAR_Adc_GetValue(PM_BAT_SAR_ID);
        MsOS_DelayTask(5);
    }
    return (U8)(u32Temp = u32Temp/BAT_ADC_VAL_EQ_NUM);
}


A、名称:递推平均滤波法(又称滑动平均滤波法)
B、方法:
把连续取得的N个采样值看成一个队列,队列的长度固定为N,
每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据(先进先出原则),
把队列中的N个数据进行算术平均运算,获得新的滤波结果。
N值的选取:流量,N=12;压力,N=4;液面,N=4-12;温度,N=1-4。
C、优点:
对周期性干扰有良好的抑制作用,平滑度高;
适用于高频振荡的系统。
D、缺点:
灵敏度低,对偶然出现的脉冲性干扰的抑制作用较差;
不易消除由于脉冲干扰所引起的采样值偏差;
不适用于脉冲干扰比较严重的场合;
比较浪费RAM。

//Moving average filter 递推均值滤波
#define N 8  // 4, 6, 8, 10, 12 
U8 value_buf[N];  
U8 maf_count=0;  
U8 MovingAverageFilter(void)  
{  
    U8 count;
    int sum=0;  
    value_buf[maf_count++] = AverageFilter();  
    if (maf_count == N)  
        maf_count = 0;  
    for (count=0;countcount++)  
        sum += value_buf[count];  
    return (U8)(sum/N);  
}  

你可能感兴趣的:(编程算法)