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

📄 galfield.cpp

📁 《无线通信系统仿真——c++使用模型》这本书的源代码
💻 CPP
字号:
// galfield.cpp
//

#include <iostream>
#include "galfield.h"
#include "isprime.h"
#include "xfelem.h"
#include <stdlib.h>

GaloisField::GaloisField( int base, 
                          int degree, 
                          PolyOvrPrimeField *prim_poly)
{
  Base = base;
  Degree = degree;
  Prim_Poly = prim_poly;
  Reduc_Poly = new PrimeFieldElem[degree+1];

  for(int term=(Prim_Poly->MaxDegree()); term>=0; term--)
    {
//    Reduc_Poly[term] = (base-(Prim_Poly->Coefficient(term)))%base;
    Reduc_Poly[term] = PrimeFieldElem(base,0)-(Prim_Poly->Coefficient(term));
    }

  #ifdef NOT_DEFINED
  if( ValueIsPrime(order) )
    {
    cout << "order is prime" << endl;
    //GenericField* pImplemField = new PrimeField(order);
    }
  else
    {
    cout << "order is composite" << endl;
    }
  #endif
}
int GaloisField::GetDegree(void)
{
  return Degree;
}
int GaloisField::GetBase(void)
{
  return Base;
}

ExtenFieldElem GaloisField::GetElement(int expon)
{
  ExtenFieldElem result(this);
  PrimeFieldElem *work;
  int dgt_idx,elm_idx;
  work = new PrimeFieldElem[Degree+1];
  //
  // Initialize working m-tuple to equal 0...01
  work[0]=PrimeFieldElem(Base,1);
  for(dgt_idx=1; dgt_idx<Degree; dgt_idx++)
    {
    work[dgt_idx]=PrimeFieldElem(Base,0);
    }
  // Build elements of field until the element alpha**expon
  // is reached
  for(elm_idx=1; elm_idx<=expon; elm_idx++)
    {
    // multiply working element by alpha
    for(dgt_idx=Degree; dgt_idx>=1; dgt_idx--)
      {
      work[dgt_idx]=work[dgt_idx-1];
      }
    work[0]=PrimeFieldElem(Base,0);
    // if multiplication causes an overflow,
    // reduce by subtracting alpha**m
    while(work[Degree]!=0)
      {
      for(dgt_idx=0; dgt_idx<=Degree; dgt_idx++)
        {
        work[dgt_idx] = Reduc_Poly[dgt_idx]+work[dgt_idx];
        }
      }
    //cout << endl;
    }
  // copy stuff into result object
  result.Field = this;
  for(dgt_idx=0; dgt_idx<Degree; dgt_idx++)
    {
    result.Value[dgt_idx] = work[dgt_idx];
    }
  return(result);
}

⌨️ 快捷键说明

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