Auf x stellen nach dem Komma runden?



  • lord_fritte schrieb:

    Ich finde das komisch, es gibt einen Haufen Funktionen für Hohe Mathematik, spezielle Funktionen fürs Runden(auf oder ab) aber ein einfaches automatisches Runden gibt es nicht.

    Wie Du an der Wurzelfunktion vielleicht schon gemerkt hast, gibt es nicht für alles Funktionen, sondern gerade genug um alles nachbilden zu können. Eine x. Wurzel aus y Funktion ist nicht nötig, weil das y ^ (1/x) entspricht, und eine Potenzier-Funktion ist vorhanden.

    Auch Rundungsfunktionen kannst Du Dir zusammenbauen: Komma verschieben, ab dem Komma runden, Komma zurückschieben. Einfache Mathematik 😉 - wobei ich immernoch meine, dass runden bei der Ausgabe vollkommen reicht.



  • lord_fritte schrieb:

    Ist es eigentlich möglich eigene Funktionen in der cmath.h einzutragen?

    Theoretisch vielleicht, aber praktisch würde ich davon abraten. Notfalls kannst du dir ja einen eigenen mymath-Header mit solchen Hilfsfunktionen anlegen.
    (btw, der Header heißt entweder <math.h> oder <cmath> - ein "cmath.h" gibt es nicht)

    Was mich auch interessieren würde ist wie ein Computer die Wurzel rechnet, ich habe zwar schon ein bisschen mit Google gesucht, aber nicht wirklich was gefunden.

    Da gibt's verschiedene Ansätze, die alle zum selben Ergebnis führen: Berechnung von Wurzeln. Was davon die schnellste/beste Version ist, bin ich nicht sicher.



  • Hallo,

    Schau dir einfach mal einen Artikel im Wikipedia über Potenzrechnung und Logarithmen an. Da findest du alles was du brauchst.



  • Die Wurzelrechnungen sehen alle unmöglich aus ^^



  • lord_fritte schrieb:

    Die Wurzelrechnungen sehen alle unmöglich aus ^^

    Für dich vielleicht, für den Computer sind sie klar verständlich 😉 (aber womöglich arbeitet das System intern mit sqrt(x)==pow(x,0.5)==exp(x*ln(0.5)) (und berechnet exp() und ln() über Taylor-Reihen))



  • Du meinst sicher exp(0.5*ln(x)). 🙂



  • Oder so - das kommt davon, wenn man schneller schreibt als denkt 😃



  • Ja Computer sind schon was tolles 😃 🙂



  • Nur die Funktion verstehe ich nicht:

    inline double round(double Zahl, int Stellen = 0){
        Zahl *= pow( 10, Stellen);
        Zahl = floor(Zahl + 0.5);
        Zahl *= pow(10, -Stellen);
        return Zahl;
    }
    

    woher erkennt die Funktion wann die auf und wann sie abrunden muss?



  • lord_fritte schrieb:

    woher erkennt die Funktion wann die auf und wann sie abrunden muss?

    Gar nicht. Sie addiert 0.5 auf die letzte Stelle und schneidet dann die hinteren Stellen ab. Kommt aufs Gleiche raus.



  • Die Funktion rundet immer ab, allerdings den Wert x+0.5 - und wenn x größer ist als n.5, landest du mit der Addition im nächsthöheren nächsthöheren Intervall und rundest effektiv auf.

    Zahl  Zahl+0.5  floor(z+0.5)
    1.4   1.9       1
    1.5   2.0       2
    1.6   2.1       2
    


  • ja stimmt, danke.


Anmelden zum Antworten