Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1063211
  • 博文数量: 284
  • 博客积分: 8223
  • 博客等级: 中将
  • 技术积分: 3188
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 13:26
文章分类

全部博文(284)

文章存档

2012年(18)

2011年(33)

2010年(83)

2009年(147)

2008年(3)

分类: C/C++

2009-08-11 19:48:09

#include
#include
#include
#include
#include
static int maxnum = 3600;
void main(int argc,char **argv[])
{
  int now=0, start=0; 
  FILE *fd, *fd1;
 
  fd = fopen("test", "r");
  fd1 = fopen("test.zip", "w");
 
  float E=10.01;
  float mem, mem_old;
  float upgate; /*定义上门*/ 
  float downgate; /*定义下门*/ 
  float k1; /*k1表示上门和过程数据间的斜率*/ 
  float k2; /*k2表示下门和过程数据间的斜率*/ 
 
  fread(&mem, sizeof(float), 1, fd);
  mem_old = mem;
 
  for(;;) {
   if(now == maxnum-1) {
       fwrite(&mem, sizeof(float), 1, fd1);
       break;
    }
   fwrite(&mem, sizeof(float), 1, fd1);
    start = now;
    upgate=mem+E; 
    downgate=mem-E; 
    k1=-10000; 
    k2=-10000; 
    for(;;) {
     now++;
     mem_old = mem;
     fread(&mem, sizeof(float), 1, fd);
     if(fabs(mem-upgate)>0.001){
      if((mem-upgate)/(now -start)>k1) k1=(mem-upgate)/(now-start); 
       else {
        now=now++;
        fwrite(&mem_old, sizeof(float), 1, fd1);
        break;
       }
      }
      if(fabs(mem-downgate)>0.001){
        if((downgate-mem)/(now-start)>k2) k2=(downgate-mem)/(now-start); 
       else {
        now=now++;
        fwrite(&mem_old, sizeof(float), 1, fd1);
        break;
       }     
      } 
   if(now == maxnum-1) {
        break;
      }
    } 
  }
  fclose(fd);
  fclose(fd1);
}
程序的目的是要实现一个3600大小的float数组的压缩。
做这个测试的目的,完全源于偶然,看到上面所描述的算法,所以,自己简单实现后,想看看最终性能,请勿用于商业用途,毕竟,人家有版权的。。。
阅读(3719) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

ldp911好娃娃2015-06-02 14:46:04

我试了一下,怎么实现不了呢?test和test.zip分别代表什么啊?还有,最多只能压缩3600个数据吗?