Rechnen mit Exponenten



  • Hallo, ich möchte für ein Programm welches Dualzahle in Dezimalzahlen umrechnet die entsprechenden exponenten verwenden (z.B 2^1) doch irgendwie funktioniert das mit meinem jetzigen code nicht.
    hie ein Auszug der Schleife in der die Berechnung erfolgen soll

    do{
    ziff = dualz % 10;
    cout << ziff * ((2^position)) << endl;
    dualz = dualz / 10;
    position++;
    }while (position <= 16);
    

    als ergebnis erscheint bei der Zahl 101 nur eine 2 und nicht eine 4 0 1



  • ja kann auch nicht.

    ^ heisst in C++ nicht hoch sondern XOR...



  • Alsooooo....

    Sieh dir mal die Funktion pow() aus dem <cmath> Header an.

    Potenz pow(Basis, Exponent);
    

    Die ist übrigens nur effizient, wenn es sich um größere Potenzen und nicht Quadrierungen handelt.



  • Bei Zweierpotenzen kann er gleich shiften.



  • 314159265358979 schrieb:

    Bei Zweierpotenzen kann er gleich shiften.

    Jau, dann shifte mal fleissig 3.141592653



  • DocShoe schrieb:

    Jau, dann shifte mal fleissig 3.141592653

    Ja, addieren wäre richtig.

    #include <cstdio>
    
    float shl (float v, unsigned shift)
    {
        static const unsigned expMask = 0x7F800000;
        static const unsigned expShift = 23;
        unsigned result = ((*(unsigned*) &v) & ~expMask) | ((((*(unsigned*) &v) & expMask) + (shift << expShift)) & expMask);
        return *(float*) &result;
    }
    
    int main (void)
    {
        float d = 3.14159;
        std::printf ("2 * %f = %f", d, shl (d, 1));
    }
    

Anmelden zum Antworten