📄 arithtst.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 + -