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

📄 galoisproto.cpp

📁 心电图小波零树压缩演算法的研究
💻 CPP
字号:
/*  *********************************************************************  *                                                                   *  *               Galois Field Arithmetic Library                     *  * Prototype: Galois Field Prototype                                 *  * Version: 0.0.1                                                    *  * Author: Arash Partow - 2000                                       *  * URL: http://www.partow.net/projects/galois/index.html             *  *                                                                   *  * Copyright Notice:                                                 *  * Free use of this library is permitted under the guidelines and    *  * in accordance with the most current version of the Common Public  *  * License.                                                          *  * http://www.opensource.org/licenses/cpl.php                        *  *                                                                   *  **********************************************************************/#include <iostream>#include <string>#include <stdlib.h>#include <stdio.h>#include "GaloisField.h"#include "GaloisFieldElement.h"#include "GaloisFieldPolynomial.h"/*   p(x) = 1x^8+1x^7+0x^6+0x^5+0x^4+0x^3+1x^2+1x^1+1x^0          1    1    0    0    0    0    1    1    1*/unsigned int poly[9] = {1,1,1,0,0,0,0,1,1};/*  A Galois Field of type GF(2^8)*/galois::GaloisField gf(8,poly);galois::GaloisFieldElement gfe[10] = {                                      galois::GaloisFieldElement(&gf, 1),                                      galois::GaloisFieldElement(&gf, 2),                                      galois::GaloisFieldElement(&gf, 3),                                      galois::GaloisFieldElement(&gf, 4),                                      galois::GaloisFieldElement(&gf, 5),                                      galois::GaloisFieldElement(&gf, 6),                                      galois::GaloisFieldElement(&gf, 7),                                      galois::GaloisFieldElement(&gf, 8),                                      galois::GaloisFieldElement(&gf, 9),                                      galois::GaloisFieldElement(&gf,10)                                     };galois::GaloisFieldElement gfe2[6] = {                                      galois::GaloisFieldElement(&gf, 6),                                      galois::GaloisFieldElement(&gf, 5),                                      galois::GaloisFieldElement(&gf, 4),                                      galois::GaloisFieldElement(&gf, 3),                                      galois::GaloisFieldElement(&gf, 2),                                      galois::GaloisFieldElement(&gf, 1)                                     };galois::GaloisFieldElement gfe3[5] = {                                      galois::GaloisFieldElement(&gf, 13),                                      galois::GaloisFieldElement(&gf, 11),                                      galois::GaloisFieldElement(&gf,  7),                                      galois::GaloisFieldElement(&gf,  3),                                      galois::GaloisFieldElement(&gf,  2)                                     };galois::GaloisFieldElement gfez[3] = {                                      galois::GaloisFieldElement(&gf, 0),                                      galois::GaloisFieldElement(&gf, 0),                                      galois::GaloisFieldElement(&gf, 1)                                     };bool addsub_test(){   galois::GaloisFieldPolynomial gfp1(&gf,9,gfe);   galois::GaloisFieldPolynomial gfp2(&gf,5,gfe2);   galois::GaloisFieldPolynomial gfp3(&gf,0);   gfp3 = gfp1 + gfp2;   gfp3 = gfp3 - gfp2;   if (gfp1 != gfp3)   {      std::cout << "Add-Sub ERROR!"   << std::endl;      std::cout << "gfp1(x) " << gfp1 << std::endl;      std::cout << "gfp2(x) " << gfp2 << std::endl;      std::cout << "gfp3(x) " << gfp3 << std::endl;      return false;   }   return true;}bool muldiv_test(){   galois::GaloisFieldPolynomial gfp1(&gf,9,gfe);   galois::GaloisFieldPolynomial gfp2(&gf,5,gfe2);   galois::GaloisFieldPolynomial gfp3(&gf,0);   gfp3 = gfp1 * gfp2;   gfp3 = gfp3 / gfp2;   if (gfp1 != gfp3)   {      std::cout << "Mul-Div ERROR!"   << std::endl;      std::cout << "gfp1(x) " << gfp1 << std::endl;      std::cout << "gfp2(x) " << gfp2 << std::endl;      std::cout << "gfp3(x) " << gfp3 << std::endl;      return false;   }   return true;}bool divmod_test(){   galois::GaloisFieldPolynomial gfp1(&gf,9,gfe);   galois::GaloisFieldPolynomial gfp2(&gf,5,gfe2);   galois::GaloisFieldPolynomial gfp3(&gf,4,gfe3);   galois::GaloisFieldPolynomial gfp4(&gf,0);   gfp4 = (gfp1 * gfp2) + gfp3;   if(      (gfp4 % gfp1 != gfp3) ||      (gfp4 % gfp2 != gfp3)     )   {      std::cout << "Div-Mod ERROR!"   << std::endl;      std::cout << "gfp1(x) " << gfp1 << std::endl;      std::cout << "gfp2(x) " << gfp2 << std::endl;      std::cout << "gfp3(x) " << gfp3 << std::endl;      std::cout << "gfp4(x) " << gfp3 << std::endl;      return false;   }   return true;}bool mod_zmodetest(){   galois::GaloisFieldPolynomial gfp1(&gf,9,gfe);   galois::GaloisFieldPolynomial gfp2(&gf,2,gfez); // p(x) = x^2   if((gfp1 % gfp2) != (gfp1 % 2))   {      std::cout << "Mod-ZMod ERROR!" << std::endl;      std::cout << "gfp1(x) " << gfp1 << std::endl;      std::cout << "gfp2(x) " << gfp2 << std::endl;      return false;   }   return true;}bool exp_test(){   galois::GaloisFieldPolynomial gfp1(&gf,9,gfe);   galois::GaloisFieldPolynomial gfp2(&gf,0);   gfp2 = gfp1 ^ 10;   for (unsigned int i = 0; i < 10; i++)   {      gfp2 = gfp2 / gfp1;   }   if(gfp2 != gfp1)   {      std::cout << "Exponentiation ERROR!" << std::endl;      std::cout << "gfp1(x) " << gfp1 << std::endl;      std::cout << "gfp2(x) " << gfp2 << std::endl;      return false;   }   return true;}bool shiftleft_test(){   galois::GaloisFieldPolynomial gfp1(&gf,9,gfe);   galois::GaloisFieldPolynomial gfp2(&gf,0);   gfp2 = gfp1 << 10;   gfp2 = gfp2 >> 10;   if(gfp2 != gfp1)   {      std::cout << "Shift Left ERROR!" << std::endl;      std::cout << "gfp1(x) " << gfp1 << std::endl;      std::cout << "gfp2(x) " << gfp2 << std::endl;      return false;   }   return true;}int main(int argc, char *argv[]){   unsigned int MAX = 25500;   for(unsigned int  i = 0; i < MAX; i++)   {      if (!addsub_test())        break;      if (!muldiv_test())        break;      if (!divmod_test())        break;      if (!mod_zmodetest())        break;      if (!exp_test())        break;      if (!shiftleft_test())        break;      if (i % 100 == 0)       std::cout << i << " times" << std::endl;   }   exit(EXIT_SUCCESS);   return true;}

⌨️ 快捷键说明

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