Potenzierung funzt net -.-



  • Rekursiv ist intuitiv ?
    Na, so eine Intuition hätte ich auch gern. Meine ist da einfacher:

    long potenzieren( int basis, int exponent )
    {
    	int i = 0; long ergebnis = basis;
    
    	if ( ! exponent ) return 1;
    
    	for ( i = 0; i<exponent -1; i++ )
    	{
    	  ergebnis =   ergebnis * basis;
    	}
    
    	return ergebnis;
    }
    

    Das dürfte damit auch gleichzeitig die schnellste Version sein ( nur Multiplikation ) 😃
    Warum müsst ihr euren Quellcode so quetschen, findet ihr das schön ?



  • tststs schrieb:

    Das dürfte damit auch gleichzeitig die schnellste Version sein

    nö, meine ist schneller...
    im schnitt mehr als doppelt so schnell
    🙂



  • tststs schrieb:

    Rekursiv ist intuitiv ?
    Na, so eine Intuition hätte ich auch gern.

    Dann eigne sie Dir doch an. Ist alles ne Sache der Gewöhnung.

    Warum müsst ihr euren Quellcode so quetschen, findet ihr das schön ?

    Das ist 'n Witz, oder? Was ist denn an meinem Quellcode z.B. gequetscht? Ich habe vor und nach jedem Rechenzeichen ein Leerzeichen und füge wo nötig neue Zeilen ein. Dein Code hingegen scheint keinerlei System zu haben und streut willkürlich Leerzeichen ein (oder lässt sie weg). Und neue Zeilen scheinen auch nur eine Randexistenz zu führen (siehe Deine Deklarationen).



  • Tatsache, pale dog, deine ist schneller.
    Bei mir es es ein Faktor von 1,3. Deine ist also 1,3 mal schneller,
    aufgerundet zu deinen Gunsten 😃
    Ich habe gelesen, das Bitshift langsamer als Multiplikation ist, darum war ich mir meiner Sache so sicher, naja, Pech 😃

    Meine willkürlichen Leerzeichen dienen der Auflockerung zwecks Leserlichkeit.



  • tststs schrieb:

    Tatsache, pale dog, deine ist schneller.
    Bei mir es es ein Faktor von 1,3. Deine ist also 1,3 mal schneller

    Nö. Der Code ist nicht um einen konstanten Faktor schneller sondern wesentlich schneller. Dein Code hat eine lineare Laufzeit, der Code von pale dog hingegen eine logarithmische, d.h. je größer die zu berechnende Zahl wird, desto größer wird der Abstand zwischen den beiden Codes.

    Meine willkürlichen Leerzeichen dienen der Auflockerung zwecks Leserlichkeit.

    Interessante Auffassung.



  • Logarithmische Laufzeit, sowas kompliziertes hat der da gebaut, das hab ich gar nicht bemerkt.

    Der Faktor 1,3 bezog sich auf die Basis 5 und den Exponenten 7, da bin ich gar nicht auf die Idee gekommen, das das so eine Tricky Funktion ist, wo lernt man sowas ?
    🙂



  • tststs schrieb:

    Tatsache, pale dog, deine ist schneller.
    Bei mir es es ein Faktor von 1,3. Deine ist also 1,3 mal schneller,
    aufgerundet zu deinen Gunsten 😃

    dann setz mal bei beiden grössere exponenten ein 😉

    tststs schrieb:

    Ich habe gelesen, das Bitshift langsamer als Multiplikation ist, darum war ich mir meiner Sache so sicher, naja, Pech 😃

    shifts sind sowieso schneller als multiplikationen, aber daran liegt's nicht. die anzahl benötigter operationen, für die komplette berechnung, ist bei meiner im durchschnitt viel kleiner.

    tststs schrieb:

    ...das das so eine Tricky Funktion ist, wo lernt man sowas?

    aus büchern 😉
    --> http://www.awprofessional.com/bookstore/product.asp?isbn=0201914654&rl=1



  • Stimmt, bei noch größeren Exponenten ist der Unterschied nicht mehr zu übersehen.

    👍



  • tststs schrieb:

    Ich habe gelesen, das Bitshift langsamer als Multiplikation ist,

    Bitshifts sind schneller als Multiplikation, aber der Compiler wird die Multiplikation durch einen Bitshift ersetzen und dann ist man gleichweit.



  • GPC schrieb:

    tststs schrieb:

    Ich habe gelesen, das Bitshift langsamer als Multiplikation ist,

    Bitshifts sind schneller als Multiplikation, aber der Compiler wird die Multiplikation durch einen Bitshift ersetzen und dann ist man gleichweit.

    Hmm. Na ja, bei einer Multiplikation mit einer Konstanten mag das gehen. Aber wie will der Compiler eine Berechnung umformen, in der ich mit einer Variablen multipliziere?

    (PS: Genialer Song der Woche. Ich wollte schon eine Live-Version von "Child in Time" aus demselben Konzert vorschlagen.)



  • Konrad Rudolph schrieb:

    GPC schrieb:

    tststs schrieb:

    Ich habe gelesen, das Bitshift langsamer als Multiplikation ist,

    Bitshifts sind schneller als Multiplikation, aber der Compiler wird die Multiplikation durch einen Bitshift ersetzen und dann ist man gleichweit.

    Hmm. Na ja, bei einer Multiplikation mit einer Konstanten mag das gehen. Aber wie will der Compiler eine Berechnung umformen, in der ich mit einer Variablen multipliziere?

    Jo, das mag stimmen. Allerdings weiß ich nicht, ob's da nicht do evtl. Tricks gibt, wenn einer mit int multipliziert.

    (PS: Genialer Song der Woche. Ich wollte schon eine Live-Version von "Child in Time" aus demselben Konzert vorschlagen.)

    Danke 🙂 Ja, ich habe auch schon überlegt, Child In Time zu nehmen, aber bei der Aufnahme mag ich das Solo nicht besonders. Die Gibson ist dafür einfach zu warm und fett, hat zu wenig Attack.


Anmelden zum Antworten