Rechenarten nachbauen



  • Hi Leute!

    Zu den 4 Grundrechenarten bzw die 4 Grundrechenarten in C (z.B. in habe ich folgende Frage:

    Wie werden die Rechenarten (z.B. Division bzw. Multiplikation) in C realisiert?

    Wie kann man diese "nachbauen"?

    (Mir geht es nur um das Verständnis der Operation bzw wie diese intern aufgebaut sind)

    Danke



  • Billy12345 schrieb:

    Wie werden die Rechenarten (z.B. Division bzw. Multiplikation) in C realisiert?

    Indem die entsprechende Instruktion der CPU aufgerufen wird.

    Wie kann man diese "nachbauen"?

    Womit nachbauen? Wenn Du irgendwas bauen willst, brauchst Du Baumaterialien. Du kannst z.B. die Multiplikation als wiederholte Addition implementieren - aber das ist natürlich weder performant noch hat das irgendwas damit zu tun, wie es der Compiler macht.


  • Mod

    Crosspost.

    Lass so etwas! Frag im passenden Forum, anstatt auf gut Glück verschiedene Foren voll zu spammen. Noch dazu mit so halbgaren Fragen. Vielleicht solltest du dich darüber informieren, wie man Fragen richtig stellt. Dann bekommt man auch brauchbare Antworten.



  • Alle Rechenarten werden mit einer while-schleife erledigt

    für A := A + B, sieht das so aus:

    void add(int &a, int &b)
    {
       int c = 0;
       while(b > 0) {
         c++;
         a++;
         b--;
       }
       b = c;
    }
    


  • Billy12345 schrieb:

    Hi Leute!

    Zu den 4 Grundrechenarten bzw die 4 Grundrechenarten in C (z.B. in habe ich folgende Frage:

    Wie werden die Rechenarten (z.B. Division bzw. Multiplikation) in C realisiert?

    Wie kann man diese "nachbauen"?

    (Mir geht es nur um das Verständnis der Operation bzw wie diese intern aufgebaut sind)

    Danke

    Das Rechenwerk einer digitalen CPU arbeitet bitweise (wen wundert es?). Bei der Addition zweier Zahlen werden zuerst die unteren Bits (Bit 0) addiert, dann fortlaufend die höheren Bits, plus eventuellem Übertrag aus der Addition davor. Die Addition zweier Bits übernimmt eine XOR-Logik und den Übertrag gewinnt man durch eine AND-Verknüpfung beider Eingangsbits. Siehe auch: http://de.wikipedia.org/wiki/Halbaddierer

    Schau dir auch den Quellcode einer BigInteger-Library an. Dort kommen in etwa die gleichen Prinzipien zur Anwendung, die innerhalb einer CPU als Digitalschaltungen realisiert sind.



  • DKlay schrieb:

    void add(int &a, int &b)
    {
       int c = 0;
       while(b > 0) {
         c++;
         a++;
         b--;
       }
       b = c;
    }
    

    😃

    Z schrieb:

    Bei der Addition zweier Zahlen werden zuerst die unteren Bits (Bit 0) addiert, dann fortlaufend die höheren Bits, plus eventuellem Übertrag aus der Addition davor. Die Addition zweier Bits übernimmt eine XOR-Logik und den Übertrag gewinnt man durch eine AND-Verknüpfung beider Eingangsbits.

    Das ist ein Ripple-Carry-Addierer. Andere Möglichkeiten, einen Addierer zu realisieren: http://de.wikipedia.org/wiki/Addiernetz



  • Für Multiplikation sind hier ein paar Möglichkeiten:

    http://www.andraka.com/multipli.htm

    Die ARM Architektur benutzt den 8-bit Booth Algorithmus:

    http://de.wikipedia.org/wiki/Booth-Algorithmus



  • DKlay schrieb:

    Alle Rechenarten werden mit einer while-schleife erledigt
    für A := A + B, sieht das so aus:

    void add(int &a, int &b)
    {
       int c = 0;
       while(b > 0) {
         c++;
         a++;
         b--;
       }
       b = c;
    }
    

    Durchkommentiert:

    void add(int &a, int &b) //Zweck: Zwei Zahlen werden addiert. 
    {//Funktionsweise: >[-]<[>+<<->+]>[-<+]
       int c = 0; //>[-]<
       while(b > 0) { //[
         c++; //>+
         a++; //<<-
         b--; //>+
       } //]
       b = c; //>[-<+>]<
    }
    


  • yay, Brainfuck 😃


Anmelden zum Antworten