Potenzieren in C++



  • Ich bin seit einiger Zeit dabei mir Schleifen ins Hirn zu rammen. Als Übung wollte ich, um mein Wissen zu vertiefen, eine Potenzfunktion programmieren. Klar kann ich es auch mit <math.h> und pow(x,y) lösen, aber das ist mir zu doof.

    Wie stelle ich es an? Ich weiß nicht wie man dem Compiler sagt, etwas beliebig oft mit sich selbst zu multiplizieren. 😞

    Kann mir jemand einen Code zeigen, wo man Basis und Exponent eingeben muss und dann das Ergebnis bekommt?



  • float my_pow(float in, int times)
    {
    	if(times==0)
    		return 1;
    	float value=in;
    	while(times>1)
    	{
    		value*=in;
    		times--;
    	}
    	return value;
    }
    

    Sowas ?
    Für float-Exponenten ist das allerdings ungleich schwerer...



  • DarkShadow44 schrieb:

    float my_pow(float in, int times)
    {
    	if(times==0)
    		return 1;
    	float value=in;
    	while(times>1)
    	{
    		value*=in;
    		times--;
    	}
    	return value;
    }
    

    Sowas ?
    Für float-Exponenten ist das allerdings ungleich schwerer...

    Ich times==0 als Sonderfall nicht extra behandeln.

    float my_pow(float in, int times)
    {
    	float value=1;
    	while(times>0)//for-schleife?
    	{
    		value*=in;
    		times--;
    	}
    	return value;
    }
    


  • if (my_pow(-1, -1) != -1)
        std::cerr << "fix me !!11elf" << '\n';
    


  • @knivil

    float my_pow(float in, unsigned int times) 
    { 
        float value=1; 
        while(times>0)//for-schleife? 
        { 
            value*=in; 
            times--; 
        } 
        return value; 
    }
    

  • Mod

    Wenn der Exponent Ganzzahlig ist, dann mindestens binäre Exponentation, wenn nicht noch etwas effizienteres.

    Ich times==0 als Sonderfall nicht extra behandeln.

    Für Volkard seine Grammatik wird er in die Hölle kommen.

    //for-schleife?

    float value = 1;
    while( times-- )
        value *= in;
    

  • Mod

    @knivil [...]

    Dann aber noch definitiv

    template<typename T, typename = typename std::enable_if<std::is_signed<T>::value >::type>
    void my_pow(float, T) = delete;
    

    Damit keine Missverständnisse entstehen, außerdem muss man dann stets unsigned Werte übergeben.

    Macht keinen Bock. Ich meine, theoretisch reinen die Warnungen, - aber praktisch eben nicht.

    Edit: Das gilt doch nicht nur für integrale vorzeichenbehaftete Typen, sondern für alle vorzeichenbehafteten Typen.



  • Arcoth schrieb:

    Wenn der Exponent Ganzzahlig ist

    float value = 1;
    while( times-- )
        value *= in;
    

    failed: http://de.wikipedia.org/wiki/Ganze_Zahl

    außerdem muss man dann stets unsigned Werte übergeben

    Ihr habt das Problem nicht behoben, nur die Spezifikation geaendert.


  • Mod

    knivil schrieb:

    Arcoth schrieb:

    Wenn der Exponent Ganzzahlig ist

    float value = 1;
    while( times-- )
        value *= in;
    

    failed: http://de.wikipedia.org/wiki/Ganze_Zahl

    Moment mal. Ich habe nur Volkards Variante verkürzt, und im Satz weiter oben eine Aussage über ganzzahlige Exponenten getroffen.

    Du zitierst falsch, du Schalk.



  • Ich verstehe irgendwie nicht, warum das Problem nicht einfach behoben wird, so dass es fuer ganzzahlige Exponenten funktioniert. Wenn ich sowas wie

    template<typename T, typename = typename std::enable_if<std::is_signed<T>::value >::type>
    void my_pow(float, T) = delete;
    

    ist das sowas von WTF 😕



  • Arcoth schrieb:

    template<typename T, typename = typename std::enable_if<std::is_signed<T>::value >::type>
    void my_pow(float, T) = delete;
    

    Kapier ich nicht, wie verwendet man das ? 😕
    EDIT: Vergiss es, VS kann einfach kein C++11 >_>

    Mal ne Lösung für ganze Zahlen:

    float my_pow(float in, int times)
    {
    	if(times<0)
    	{
    		times *= -1;
    		in = 1/in;
    	}
    	float value = 1;
    	while( times-- )
    		value *= in;
    	return value;
    }
    

    Und nein, irgendwas effizienteres würde ich nicht empfehlen, es geht schließlich erstmal um die Schleife selber. 🙂



  • Arcoth schrieb:

    Für Volkard seine Grammatik wird er in die Hölle kommen.

    hihi, sehr schön, hab gemerkt, daß Du absichtlich selbstironisch auch einen fehler eingebaut hast.
    hätte natürlich heißen müssen "Für dem Volkard seine Grammatik…".


  • Mod

    volkard schrieb:

    Arcoth schrieb:

    Für Volkard seine Grammatik wird er in die Hölle kommen.

    hihi, sehr schön, hab gemerkt, daß Du absichtlich selbstironisch auch einen fehler eingebaut hast.

    Hast du mal "Die Abenteuer des Huckleberry Finn" gelesen?
    ~Edit: Titel korrigiert.~

    Edit²: Wie ich gerade feststelle, haben die meisten Übersetzungen diesen Dialekt leider nicht. Jedenfalls ist in der Ausgabe die ich besitze dieser Dialekt vorhanden: Dort fallen ständig Sätze der Form "Tom seine Tante Polly". Fand' ich sehr nett.



  • Arcoth schrieb:

    Fand' ich sehr nett.

    apostroph-regeln lesen und verstehen.


  • Mod

    grammar nazi schrieb:

    Arcoth schrieb:

    Fand' ich sehr nett.

    apostroph-regeln lesen und verstehen.

    Groß- und Kleinschreibung lesen und verstehen.



  • Arcoth schrieb:

    grammar nazi schrieb:

    Arcoth schrieb:

    Fand' ich sehr nett.

    apostroph-regeln lesen und verstehen.

    Groß- und Kleinschreibung lesen und verstehen.

    Zeichensetzung lesen und verstehen



  • Arcoth schrieb:

    volkard schrieb:

    Arcoth schrieb:

    Für Volkard seine Grammatik wird er in die Hölle kommen.

    hihi, sehr schön, hab gemerkt, daß Du absichtlich selbstironisch auch einen fehler eingebaut hast.

    Hast du mal "Die Abenteuer des Huckleberry Finn" gelesen?
    ~Edit: Titel korrigiert.~

    Kommt noch. Bin gerade am Gesamtwerk von Karl May, wo man die Rouleaux' im Bureau runterläßt. Ins eBook hab ich das für 3€ oder so gekauft, pure Scan-Kosten und ein wenig weil man der erste war und Amazon-Gebühr. Copyright ist nach 70 Jahren ja aus.

    Arcoth schrieb:

    Wie ich gerade feststelle, haben die meisten Übersetzungen diesen Dialekt leider nicht.

    Rate, warum!

    Habe den Satz "Abenteuer Flußwelt" (unbedingte Empfehlung!, aber nur in richtiger Reihenfolge lesen) für meinen Bruder gekauft. Ein netter Bucharchivar schickte mir viel mehr als bestellt, da konnte ich vergleichen. Die Kasper haben doch tatsächlich zur Neuauflage das komplette Werk auf die neue Rechtschreibung gebracht!?! Das hat doch sicher deutlich mehr als 10k€ gekostet. Es ist sogar soweit ich reingeschaut habe krass exakt, echt vom Profi.

    Warum?

    Denke mal, es geht nur darum, das Copyright zu refreshen auf wieder 70 neue Jahre.

    Arcoth schrieb:

    Jedenfalls ist in der Ausgabe die ich besitze dieser Dialekt vorhanden: Dort fallen ständig Sätze der Form "Tom seine Tante Polly". Fand' ich sehr nett.

    Ich habe heuer in Jules-Verne-Romanen genau die Schreibweisen von Wörtern wiedergefunden, für die ich im 4. bis 6. Schuljahr so abgestraft wurde. Bin deswegen sogar in einen Legastheniker-Kurs gesteckt worden, der hat mich aber wieder nach 6 Wochen rausgworfen, keiner war mehr zuständig, nur ich schrieb weiterhin viele Wörter kacke. Lesen kann Noten signifikant verschlechtern.



  • Arcoth schrieb:

    Groß- und Kleinschreibung lesen und verstehen.

    volkard schrieb:

    hihi, sehr schön, hab gemerkt, daß Du absichtlich selbstironisch auch einen fehler eingebaut hast.

    selfpwn lesen und verstehen.



  • grammar nazi schrieb:

    Arcoth schrieb:

    Groß- und Kleinschreibung lesen und verstehen.

    volkard schrieb:

    hihi, sehr schön, hab gemerkt, daß Du absichtlich selbstironisch auch einen fehler eingebaut hast.

    selfpwn lesen und verstehen.

    Gutes Beispiel:

    Auf nicht sehr klare Aussagen von unregs geht man besser nicht ein.

    Du hast als unreg die besondere Aufgabe, nicht nur Rauschen zu sein, da Dein Name schon gewaltig rauscht.


  • Mod

    unbedingte Empfehlung!, aber nur in richtiger Reihenfolge lesen

    Klingt vielversprechend, werde ich mir besorgen. 👍

    Grammer Nazi^2 schrieb:

    Zeichensetzung lesen und verstehen

    http://bit.ly/1np5HCk

    Edit: Ich versuche mal, nicht noch weiter hinab zu rutschen.


Log in to reply