pow ersetzen



  • LordJaxom schrieb:

    Reicht nicht schon das Standardbeispiel min/max zur Abschreckung?

    Schlechtes Beispiel. min/max ist nun gerade einer der Fälle, wo ein Macro tatsächlich Vorteile hat. Siehe http://www.ddj.com/cpp/184403774

    #include <windows.h>
    #include <algorithm>
    

    =>

    #include <windows.h>
    #undef max
    #undef min
    #include <algorithm>
    

    Zugegeben, wenn man das nicht weiß, resultieren einige echt eklige Bugs.



  • hmm man soll

    #define NOMINMAX
    

    nutzen, wobei dann wieder alle anderen Microsoft-Header streiken 😛 Also ist nen bissel doof und am einfachsten wirklich durch #undef NACH allen Microsoft-Headern zu lösen ...



  • Ich kenne die Umgehungsmöglichkeit, wollte auch nur auf das Problem hinweisen. Und das Makro NOMINMAX gab es bestimmt nicht von Anfang an (➡ Bekämpfung der Symptome)



  • hmpf ich glaub ich hätte besser mal die aufgabenstellung mit gepostet:

    Zahlenkonvertierung
    Schreiben Sie ein C++-Programm, das positive, ganze Dezimalzahlen in die
    entsprechenden Dualzahlen und Oktalzahlen umrechnet.
    Hinweise, verbindlich:
    - Die Umwandlung in Dualzahlen muss nach der Potenzenmethode, die
    Umrechnung in Oktalzahlen nach der Restwertmethode erfolgen.
    - Speichern Sie die Ergebnisse in Strings.
    - Benutzen Sie einen String-Vektor, um die Ziffern des Oktalsystems zu speichern:
    string oktalziffer[8]={"0","1","2","3","4","5","6","7"};
    - Der Modulo-Operator % gibt den ganzzahligen Rest der Integer-Division zweier
    Zahlen zurück:
    11 % 4 = 3
    - Die Integer-Division / schneidet die Nachkommastellen des Divisionsergebnisses
    ab:
    9 / 2 = 4
    Testlauf (Eingaben unterstrichen):
    Dezimalzahl = ? 255
    Umrechnung einer ganzzahligen, positiven Dezimalzahl in
    - eine Dualzahl nach der Potenzenmethode : Dualzahl = 11111111
    - eine Oktalzahl nach der Restwertmethode: Oktalzahl = 377
    Press any key to continue



  • Die Lösung wurde doch schon genannt (auch wenn sie in der anschließenden Diskussion über Makros vs. Inline-Funktionen untergegangen ist). Du brauchst dort nur Potenzen von 2 ( pow(2,i); und dazu reicht der Shift-Operator völlig aus:

    inline int exp2(int x)
    { return 1<<x; }
    
    ...
    int i,j;//Gleitkomma-Werte sind hierfür überflüssig
    ...
    for(i=0; i<=16; i++) 
    { 
      j = exp2(i);// j = pow(2,i);
      if(inp_du < j) 
        break; 
    } 
    ...
    


  • ODer einfach auf die erste Seite auf meine Beiträge achten und mal die anderen gekonnt außer acht lassen ...



  • 2^0 ist doch 1, jedenfalls als ich noch Mathe gelernt hab 🙂

    inline int exp2(unsigned int x)
    { return (x==0)? (1): (1<<x); }
    

    edit: Das ist natürlich Unsinn 🤡



  • Badestrand schrieb:

    2^0 ist doch 1, jedenfalls als ich noch Mathe gelernt hab 🙂

    Ja - und 1<<0 ergibt rein zufällig auch 1, also erübrigt sich deine Fallunterscheidung 😉



  • CStoll schrieb:

    Badestrand schrieb:

    2^0 ist doch 1, jedenfalls als ich noch Mathe gelernt hab 🙂

    Ja - und 1<<0 ergibt rein zufällig auch 1, also erübrigt sich deine Fallunterscheidung 😉

    Ups 😃
    Ich hab irgendwie an.. irgendwas anderes gedacht 😕



  • ok, danke ich habs jetzt verstanden und es funktioniert auch.
    und viel spaß noch beim diskutieren 😃


Anmelden zum Antworten