Come progettare le classi nel modo giusto (inviare messaggi)

-1

Cercando di progettare un piccolo progetto nel modo giusto e avere un problema in esso: \

sull'attività: è necessario realizzare la moltiplicazione di grandi numeri, usando fft

Per prima cosa ho le classi

class LargeNumber{};
class Field{}; -- abstract (maybe interface would be better)
class C_C:public virtual Field{};
class Z_p:public virtual Field{};

Quindi, LargeNumber può usare le classi Z_P (modulo P) o C_C (complesso) (più corretto: C_C e Z_P hanno funzioni Mul e Sum per moltiplicare gli oggetti LargeNumber)

ma un altro compito più interessante e difficile.

Devo calcolare tutte le operazioni e il tempo necessari per ogni operazione "grande". E anche bisogno di gettare messaggi e creare registri.

Come risolvere questo problema? (cosa dovrei fare?)

Sarà anche fantastico, se commenterai i modelli e le tue migliori pratiche. e così queste classi:

class LargeNumber {
  private:
  int length;
  vector <short int> number;
  public:
  //prototype
  LargeNumber clone(){            
        return (*this);
  }
  //get
  int Length() const;
  vector <short int> Number()const;      
  //static
  static LargeNumber& GenerateOne(int);// create new LargeNumber
  static void Print(const LargeNumber& print);
  //constructors
  LargeNumber();
  LargeNumber(const LargeNumber& obj);
  explicit LargeNumber(int len);      
  explicit LargeNumber(vector <short int>);
  LargeNumber(int,int);
  //destructors
  ~LargeNumber();    
  void Kill();
  //operators
  LargeNumber& operator= (const LargeNumber& );
  LargeNumber& operator--();    
  LargeNumber& operator++();
  bool operator<(const LargeNumber&)const;


  };


 class Field {
  private:
  inline int max(const int a, const int b){return (a>b?a:b);}       
  inline int min(const int a, const int b){return (a<b?a:b);}     
  int i;
  //need Mod and 2**P-1
  LargeNumber& Deux (const int );

  LargeNumber& Mod (LargeNumber&);
  public:
         virtual ~Field();
         virtual LargeNumber& Sum (const LargeNumber& , const LargeNumber& );
         virtual LargeNumber& Sub (const LargeNumber& , const LargeNumber& );
         virtual LargeNumber& Mul (const LargeNumber& , const LargeNumber& );        
         virtual LargeNumber& Pow (const LargeNumber& , const LargeNumber& );
         virtual bool Prime (LargeNumber& );


  }; 
    
posta gaussblurinc 12.02.2012 - 16:41
fonte

1 risposta

4

Non reinventare la ruota, usa una buona implementazione esistente di aritmetica di precisione arbitraria, come la CLN di Bruno Haible (che è in parte basata su GNU GMP).

    
risposta data 12.02.2012 - 21:26
fonte

Leggi altre domande sui tag