größerer integer



  • Ich brauche für ein Verschlüsselungssystem einen bisschen größeren integer. (ich dachte da so an 10kb lang oder so). Wie würdet ihr sowas machen. Also ein beliebig langer integer. Würdet ihr irgendwie nen struct machen mit nem Array von normalen integern, oder nem bitfeld, und dann alle operatoren neu schreiben? (naja ich brauch nur + und mod.Das wär ja einfach zu schreiben)



  • Ich würd eine Bignum-Bibliothek wie die GMP benutzen.



  • Also die Addition für ein integer<N> müsste doch relativ einfach zu realisieren sein. Der Modulus dürfte schwerer werden. Um keine ganze Klasse zu basteln habe ich nur mal eine Funktion zum Addieren erstellt. Das ganze müsste man natürlich in den + Operator packen.

    // Ich gehe zur Vereinfachung mal davon aus, dass long doppelt
    // so groß ist wie short (muss nicht sein!!!) und wir eine Klasse
    // integer<N> haben in der ein Feld aus shorts ist auf welches wir mit
    // der Funktion data Zugriff bekommen. size gibt die Anzahl der short
    // Werte zurück.
    
    template<int N>
    integer<N> Addition(const integer<N>& u, const integer<N>& v)
    {
      integer<N> rval;
      short carry = 0;
      int n = u.size() - 1;
      do {
        long sum = u.data()[n] + v.data()[n] + carry;
        rval.data[n] = T(sum & short(~0));
        carry = static_cast<T>(sum >> (CHAR_BIT * sizeof(short)));
      }
      while(!(--n < 0));
    
      return rval;
    }
    

Anmelden zum Antworten