⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arithtst.c

📁 常用的无损压缩算法源代码
💻 C
字号:
/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *//*     A R I T H M E T I C   C O D E   I M P L E M E N T A T I O N     *//* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *//*     > > > > >    ANSI C version  4.03  -  05/30/95    < < < < <     *//*   Amir Said - amir@densis.fee.unicamp.br                            *//*   Faculty of Electrical Engineering                                 *//*   University of Campinas (UNICAMP) - Campinas, SP 13081, Brazil     *//*   William A. Pearlman - pearlman@ecse.rpi.edu                       *//*   Dept. of Electrical, Computer, and Systems Engineering            *//*   Rensselaer Polytechnic Institute - Troy, NY 12180, USA            *//* - - Inclusion - - - - - - - - - - - - - - - - - - - - - - - - - - - */#include "arithm.h"/* - - Definitions - - - - - - - - - - - - - - - - - - - - - - - - - - */int Random(int n);    /* Portable pseudo-random numbers generator      */                      /* returns integer in the interval [0,n-1]       */                      /* nonuniform distribution                       */void SRand(long);long seed_1, seed_2;/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *//* - - Main function - - - - - - - - - - - - - - - - - - - - - - - - - */int main(void){  Adaptive_Model model1, model2;  Encoder enc;  Decoder dec;  int i, j, k;  long  nb;/* Random message coding */  Create_Model(&model1, 5);      /* initialize statistics and define */  Create_Model(&model2, 15);     /* alphabet size = 5 and 15         */  Start_Encoder(&enc, "test.cod");  /* initialize encoder, open file */  SRand(111);         /* set random number generator for coding test */  for (i = 0; i < 500; i++) {    k = Random(5);                    /* get random data symbol      */    Write_Symbol(&enc, &model1, k);   /* code symbol with "model1"   */    k = Random(15);                   /* get random data symbol      */    Write_Symbol(&enc, &model2, k);   /* code symbol with "model2"   */    k = Random(32);                   /* get random data symbol      */    Write_Bits(&enc, 5, k); }         /* code 5 bits (uniform model) */  Set_New_Model(&model1, 2);         /* reset models and define new  */  Set_New_Model(&model2, 4);         /* alphabet size = 2 and 4      */  for (i = 0; i < 500; i++) {        /* code new random data symbols */    k = Random(2);    Write_Symbol(&enc, &model1, k);    k = Random(4);    Write_Symbol(&enc, &model2, k); }  Stop_Encoder(&enc);                  /* close encoded message file */  nb = Bytes_Used(&enc);                /* bytes used in the message */  printf(" Coded message has %ld bytes.",  nb);/* Message decoding and testing */  Start_Decoder(&dec, "test.cod"); /* initialize decoder, open file */  Set_New_Model(&model1, 5);      /* duplicate encoder's definitions */  Set_New_Model(&model2, 15);  SRand(111);       /* set random number generator for decoding test */  for (i = 0; i < 500; i++) {    k = Random(5);    j = Read_Symbol(&dec, &model1);   /* decode symbol with "model1" */    if (j != k)                       /* test decoded symbol         */      puts("\aDecoding error!");    k = Random(15);    j = Read_Symbol(&dec, &model2);   /* decode symbol with "model2" */    if (j != k)                       /* test decoded symbol         */      puts("\aDecoding error!");     k = Random(32);    j = Read_Bits(&dec, 5);           /* decode 5 bits               */    if (j != k)                       /* test decoded symbol         */      puts("\aDecoding error!"); }  Set_New_Model(&model1, 2);          /* reset and define new models */  Set_New_Model(&model2, 4);  for (i = 0; i < 500; i++) { /* decode next symbols with new models */    k = Random(2);    j = Read_Symbol(&dec, &model1);    if (j != k)      puts("\aDecoding error!");    k = Random(4);    j = Read_Symbol(&dec, &model2);    if (j != k)      puts("\aDecoding error!"); }  printf("\n\n End of the arithmetic coding test.\n\n");  return 0;}/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - *//* - - Implementations of the random generator - - - - - - - - - - - - */int Random(int n){  long z, k;  double t;  k = seed_1 / 53668L;  seed_1 = 40014L * (seed_1 - k * 53668L) - k * 12211L;  if (seed_1 < 0L) seed_1 += 2147483563L;  k = seed_2 / 52774L;  seed_2 = 40692L * (seed_2 - k * 52774L) - k * 3791L;  if (seed_2 < 0L) seed_2 += 2147483399L;  z = seed_1 - seed_2;  if (z < 1) z += 2147483562L;  t = 4.656613e-10 * z;  return (int) (n * t * t);}/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */void SRand(long s){  seed_1 = s;  seed_2 = 2147483399L - s;}/* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = *//* end of file < arithtst.c > */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -