Hochzahlen in C++



  • Wie kann ich in C++ mit Hochzahlen rechnen.

    z.B. 40³



  • bei 40³:

    int rechnung(int a,int b)//a für ³ und b für 40
    {
    int summe;
    for(int i=a;a<2;a--)
    {
    summe+=b*b;
    }
    return summe;
    }
    

    ich habs sehr einfach gehalten damit du's verstehst 😃



  • @DeathRow, das gibt irgendwas undefiniertes zurück.

    http://www.cppreference.com/stdmath/pow.html



  • Steht eigentlich in jedem vernünftigen C++ Buch drin:

    // Header: <cmath>
    
    double pow(double d, double e);
    double pow(double d, int i);
    


  • @borg er wollt aber glaub keine pow funktion aus ner lib

    aso hier mein code eben wars noch bisschen falsch sorry

    int rechnung(int a,int b)
    { 
    int summe=b; 
    for(int i=0;i<a;i++) 
    { 
    summe=summe*b; 
    } 
    return summe; 
    }
    


  • DeathRow schrieb:

    @borg er wollt aber glaub keine pow funktion aus ner lib

    mmh.. lib? math.h bzw cmath sollte bei jedem c/c++ compiler dabei sein 🙂

    DeathRow schrieb:

    aso hier mein code eben wars noch bisschen falsch sorry

    int rechnung(int a,int b)
    { 
    int summe=b; 
    for(int i=0;i<a;i++) 
    { 
    summe=summe*b; 
    } 
    return summe; 
    }
    

    ok. ich möchte aber gerne auch 0.23^0.42 rechnen können 🙂



  • double rechnung(double a,double b) 
    { 
    double summe=b; 
    for(double i=0;i<a;i++) 
    { 
    summe=summe*b; 
    } 
    return summe; 
    }
    

    so jetzt zufrieden? 😃 😃 😃 😃 😃 😃 😃 😃 😃



  • DeathRow schrieb:

    double rechnung(double a,double b) 
    { 
    double summe=b; 
    for(double i=0;i<a;i++) 
    { 
    summe=summe*b; 
    } 
    return summe; 
    }
    

    so jetzt zufrieden?

    nein 🙂
    4^0.5 ist leider nicht 16.



  • psst es gibt auch den op *= *zwinker*

    und wenn du mit beliebigen rellen exponenten arbeiten willst, dann freunde dich mal damit an:

    a^b=exp(b* ln(a))

    alternativ den exponenten in zähler und nenner aufteilen, und dann die zählerte wurzel aus a^nenner bilden(jetzt wär latex doch wirklich spannend zu können^^)



  • Hätte ich vieleicht auch noch schreiben sollen. So wie borg sagt ist es ganz wichtig das es auch mit z.B. hoch 0,333 funktioniert.



  • Was habt ihr alle gegen pow?



  • Habe es jetzt mit pow versucht und das macht ja genau das was ich gesucht habe. Vielen Dank euch allen!



  • Ich möchte gerne mit der pow Funktion und einem negativen Exponenten rechnen, ich komme aber nicht auf das richtig Ergebnis. Also zunächst möchte ich die Zahl 1.256637061 * 10^(-6) der variablen mue zuweisen. Ich vermute mal der Fehler liegt in der Syntax? Weiß jemand wo mein Fehler liegt?

    float mue=pow(1.256637061 * 10 ,(-6));



  • du weißt, dass das bei 10^x nur eine andere Schreibweise ist?
    1.256637061 * 10^(-6) = 0.000001256637061

    aber ansonsten

    float mue = 1.256637061f * pow(10, -6);
    

    greetz KN4CK3R



  • Danke für die schnelle Antwort, hat geklappt 🙂



  • template <int A, int B>
    struct pow
    {
    	enum { value = A * pow<A, B - 1>::value };
    };
    
    template <int A>
    struct pow<A, 0>
    {
    	enum { value = 1 };
    };
    
    template <>
    struct pow<0, 0>
    {};
    

    Funktioniert immerhin mit Ganzzahlen 🤡


  • Mod

    314159265358979 schrieb:

    template <int A, int B>
    struct pow
    {
    	enum { value = A * pow<A, B - 1>::value };
    };
    
    template <int A>
    struct pow<A, 0>
    {
    	enum { value = 1 };
    };
    
    template <>
    struct pow<0, 0>
    {};
    

    Funktioniert immerhin mit Ganzzahlen 🤡

    mit constexpr-Support gibts es allerdings keinen Grund mehr, so etwas zu benutzen.



  • the hammer schrieb:

    Also zunächst möchte ich die Zahl 1.256637061 * 10^(-6) der variablen mue zuweisen.

    Dafür pow zu benutzen ist ziemlicher Overkill. Zahlen in Exponentialschreibweise kann man in C++ so darstellen:

    float mue = 1.256637061E-6;
    


  • camper schrieb:

    314159265358979 schrieb:

    template <int A, int B>
    struct pow
    {
    	enum { value = A * pow<A, B - 1>::value };
    };
    
    template <int A>
    struct pow<A, 0>
    {
    	enum { value = 1 };
    };
    
    template <>
    struct pow<0, 0>
    {};
    

    Funktioniert immerhin mit Ganzzahlen 🤡

    mit constexpr-Support gibts es allerdings keinen Grund mehr, so etwas zu benutzen.

    Außer dem GCC >= 4.6 kann das aber noch kein Compiler, leider.



  • Ich hab sowieso so gut wie nie Potenzen, die zur Compilezeit feststehen...

    Sinnvoll wäre eine Potenzklasse, die nicht als Zahl ausgerechnet wird, aber die Rechenoperationen erlaubt. Nur wenn nötig könnte man diese umrechnen oder so. Das wäre hilfreich, wenn man mit Modulo-Spielereien arbeitet oder die Zahlen zu groß für int64 sind. Aber das ist natürlich auch nur wieder ein Ausnahmefall...

    Hängt aber ziemlich stark vom Einsatzgebiet ab, wenn man über std::pow oder die Template-Lösung für Compilezeit-Potenzen hinausgehen möchte, wie man da rumbasteln sollte.


Log in to reply