Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Modulo rechnen mit Bits

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
13.05.2007, 18:46 Uhr
Matthias Fischer



hi leute!

hab ein problem! hab folgendes programm programmiert, und zwar, dass zwei 256bit zahlen addiert werden, nun will ich die gerne modulo rechnen. das problem für mich ist, dass ich jedes bit in nem array-element speichere wie ihr seht. wie könnt ich die modulo-operation nun angehen? ich will keinen %-operator verwenden, sondern per hand das ausprogrammiern! wär toll, wenn jemand antworten könnt, der ne möglichkeit sieht das zu implementieren! danke schon mal!

mein programm bis jetzt:


C++:

#include <iostream>
#include <math.h>
  
using std::cout;
using std::endl;
  
class BigInt
{
   protected:
   int zahl1[256];
   int zahl2[256];
   int erg[512];
  
   public:
     BigInt(void);
     double add();
     int clean_vars();
     int set_vars();
};

  BigInt::BigInt(void)
  {
    clean_vars();
    set_vars();  
  }
  
  int BigInt::clean_vars()
  {
    for(int i = 0; i < 256; i++)
    {
      zahl1[i] = 0;
      zahl2[i] = 0;
    }
    
    for(int j = 0; j < 512; j++)
      erg[j] = 0;
      
    set_vars();
    
    return (0);
  }
  
  int BigInt::set_vars()
  {
    // 8870    
    zahl1[13] = 1;
    zahl1[12] = 0;
    zahl1[11] = 0;
    zahl1[10] = 0;
    zahl1[9] =  1;
    zahl1[8] =  0;  
    zahl1[7] =  1;
    zahl1[6] =  0;
    zahl1[5] =  1;
    zahl1[4] =  0;
    zahl1[3] =  0;
    zahl1[2] =  1;
    zahl1[1] =  1;
    zahl1[0] =  0;
  
      // 3
    zahl2[3] = 0;
    zahl2[2] = 0;
    zahl2[1] = 1;
    zahl2[0] = 1;      
  
    return (0);
  }
  
   double BigInt::add()
   {
     for(int i = 0; i < 256; i++)
     {
       erg[i] += zahl1[i] + zahl2[i];
      
       if(erg[i] == 2)
       {
         erg[i] = 0;
         erg[i + 1] = 1;
       }
     }
  
    //Convert Bin->Dec
    double j = 0;
    for(int a = 0; a < 256; a++)
        j += (pow(2,a) * erg[a]);
  
   return j;
  }
  
  int main(int argc, char *argv)
  {
    BigInt bi;
  
    cout << "Zahlen: 8870 und 3" << endl;
    cout << "Addition: " << bi.add() << endl;
    
    return (0);
  }



Dieser Post wurde am 13.05.2007 um 18:47 Uhr von Matthias Fischer editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.05.2007, 11:47 Uhr
Th



Der Modulo Operator ist ja über die Division definiert, d.h. der Divisionsrest:
A % B = A - (A/B) * B

Du müßtest also erstmal die Division ausprogrammieren, dann noch die Multiplikation und die Subtraktion...

Außerdem erscheint mir dein Datenformat dazu nicht sehr geeignet (da du ja pro int nur ein Bit speicherst (0 oder 1)) - besonders für die Division (Multiplikation und Subtraktion sind ja ähnlich einfach wie Addition).

Komisch erscheint mir dann auch noch die Konvertierung nach 'double' (?)

P.S. sehe gerade noch, daß du in der add-Methode noch mindestens 1 Fehler drin hast: du setzt das Array 'erg' vorher nicht auf 0 zurück, d.h. bei mehrmaligem Aufrufen von add wird noch der alte Inhalt mitaddiert.

Mir scheint, du gehst das ganze nicht sehr mathematisch an...

Dieser Post wurde am 14.05.2007 um 11:53 Uhr von Th editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: