Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Division / Mutiplikation
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
The real Agent D



Anmeldungsdatum: 24.11.2005
Beiträge: 605
Wohnort: Hall i. T.

BeitragVerfasst am: 18.07.2007, 11:37    Titel: Division / Mutiplikation Antworten mit Zitat

Hi,

ich stehe momentan vor einem kleinen Problem. Ich will Schaltungen entwerfen, die es ermöglicht, zwei Zahlen mteinander zu dividieren/multiplizierne. Mein Problem: Ich kann kein Art Formel finden, mit der man eine Division/Multiplikation mit Bolschen Operatoren Ausdrückt. Ich habe in einem Buch über Elektronik so eine Formel für Aditionen und Subtraktionen gefunden, da steht allerdings nur drinnen, dass eine Division eine erweiterte Subtraktion ist und eine Multiplikation eine erweiterte Adition. Mehr steht da nicht. Ich bin auch bei Wikipedia und Konsorten nicht fündig geworden.
Kann mir vielleicht hier jemand weiter helfen?

mfg

The real Agent D
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 18.07.2007, 12:00    Titel: Antworten mit Zitat

Hallo,

das ist auch nicht so einfach, weil Du Multiplikation und Division auf Addition und Subtraktion zurückführen musst. Bei Multiplikation ist das noch relativ einfach, da machst du aus 3*3 eben 3+3+3. Beim Teilen ist es etwas schwieriger. da musst Du den Divisor so lange vom Dividenden abziehen, bis es nicht mehr geht. Dabei kann natürlich noch ein Rest übrigbleiben, aber eine Fließkommaverwaltung aus Logikgattern nachzubauen dürfte kompliziert werden. Vielleicht schaust Du Dir mal an, wie das bei diesem Streichholzcomputer gemacht wird.

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 18.07.2007, 12:57    Titel: Antworten mit Zitat

Mir sind zwei, drei Lösungen bekannt:

Erstens du nimmst ein ROM/EPROM/EEPROM und speicherst darin einfach die Multiplikationstabelle ab.

Eine anderung Lösung sind Sieberegister, die immerhin die Multiplikation/Division mit 2, 4, 8, 16 ... erlauben.

Eine andere möglichkeit ist die Multiplikation in einzellne Additionen zu legen.
Dann brauchst du aber ein Steuerwerk und Takt.

Edit 1: dacht -> Takt
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight


Zuletzt bearbeitet von Michael Frey am 18.07.2007, 15:20, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 18.07.2007, 13:49    Titel: Antworten mit Zitat

Es gibt da noch ein Multiplikationsverfahren, dessen Namen ich gerade nicht weiß:
Einer der beiden Faktoren wird halbiert, der andere verdoppelt. Immer, wenn der erste (zu halbierende) Faktor ungerade ist, wird er um eins reduziert und der zugehörige zweite Faktor notiert. Ist der erste Faktor bei 1 angekommen, werden alle notierten Zahlen addiert.

Beispiel: Das Kreuz X zeigt an, dass der zweite Faktor notiert wurde.
21 * 25 X (Anmerkung: 21 wird auf 20 reduziert und in der nächsten Zeile halbiert)
10 * 50
5 * 100 X
2 * 200
1 * 400 X

25+100+400 = 525 = 21*25
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 18.07.2007, 14:17    Titel: Antworten mit Zitat

Man könnte auch vermittels eines Bipolaren Schalters (gatter, relais) eine art schleife basteln fürs dividieren...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 18.07.2007, 19:57    Titel: Antworten mit Zitat

Zum Thema Division im Binärsystem:

http://en.wikipedia.org/wiki/Division_%28digital%29

Binär ist eine Division recht einfach. Wenn man es mit logischen Bausteinen realisieren möchte, so braucht man im Prinzip nur Schieberegister, Subtrahierer (bzw. Addierer mit dem Komplement) und noch etwas Logik wie oberstes Bit auf negativen Wert vergleichen, entsprachen 0 oder 1 ins Ergebnisregister übertragen und bei Bedarf Substraktionsergebnis ins Schieberegister setzen.

Wo man im Dezimalsystem umständlich abschätzen muss, wieviele Mal der Teiler "hineinpasst" und dann zurückmultiplizieren und subtrahieren, so ist dies bei der binären Division bloss ein Grössenvergleich mit anschliessend direkter Substraktion.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.07.2007, 23:17    Titel: Antworten mit Zitat

mal ne etwas umfassende sache zu rechenzeugs allgemein auf prozessoren, n foliensatz aus meinem studium, über "Rechenwerke" bei mikroprozessoren: http://www.ra.informatik.tu-darmstadt.de/lehre/vorlesungen/tgdi2/vorlesung/04-k3-Rechenwerke.pdf, bei fragen frag, da steht eigentlich ziemlich alles ausführlich genug drin ums verstehen zu können denke ich. Mehrere additionsschaltungen, eine multiplikationsschaltung (die direkt einfach durchläuft, vermutlich das was du bräuchtest), mehrere multiplikationssysteme (die allerdings getaktet über mehrere takte laufen, wie bei schriftlichem multiplizieren wo du die zahlen so schräg untereinanderschreibst rechnet die schaltung das schrittweise) und mehrere divisionssysteme (selbes prinzip), ne divisionsschaltung hab ich jedoch leider nicht im angebot zwinkern
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 19.07.2007, 09:54    Titel: Antworten mit Zitat

Michael Frey hat Folgendes geschrieben:
[...] du nimmst ein ROM/EPROM/EEPROM und speicherst darin einfach die Multiplikationstabelle ab.

Das würde ich auch auf jeden Fall empfehlen!
Ist super einfach und du brauchst keine Ablaufsteuerung oder sonstiges.
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 19.07.2007, 11:13    Titel: Antworten mit Zitat

Bevor wir hier weiter spekulieren, wäre es vielleicht nicht schlecht, wenn "The real Agent D" nochmal etwas genauer beschreibt, wie er sich das prinzipiell vorgestellt hat. Welcher Zahlenbereich, welche Genauigkeit, Ein- und Ausgabe als Binär- oder Dezimalwert usw. Soll der Entwurf technisch umgesetzt werden und wie?
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The real Agent D



Anmeldungsdatum: 24.11.2005
Beiträge: 605
Wohnort: Hall i. T.

BeitragVerfasst am: 19.07.2007, 11:26    Titel: Antworten mit Zitat

Erst mal danke an alle sehr hilfreichen Posts!

@Skilltronics:

Mein Ziel: Wenn 2 Zahlen miteinander Dividierd werden sollen, werden sie an eine Platiene geschickt. a / b . Dort wird b mit null verglichen. Wenn b ungleich null, dann werden die beiden miteinander Dividierd und das Ergebniss zurückgeliefert und an einer bestimmten stelle im Rom gespeichert.
Dasselbe mit Multiplikation. Hier wird auch eine der Zaheln mit 0 verglichen. Drift das zu, wird gleich schon 0 als Ergebniss zurück geliefert.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 19.07.2007, 11:48    Titel: Antworten mit Zitat

Wo kommen die zwei Zahlen her? Werden die eingegeben und wie, über ein Tastenfeld? Wie groß dürfen die Zahlen sein, soll nur mit positiven und ganzzahligen Werten gerechnet werden? Gibt man sie als Binärzahl ein oder dezimal?

Wie soll die Platine aussehen? Willst du das aus einzelnen Gattern aufbauen (weil Du von boolschen Operatoren sprachst) oder kann auch ein Mikrocontroller drauf sein? Was bringt Dir das Ergebnis im ROM? Wie holst Du es dort heraus um es anzusehen?

Es gibt sowas übrigens auch schon fertig zu kaufen

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The real Agent D



Anmeldungsdatum: 24.11.2005
Beiträge: 605
Wohnort: Hall i. T.

BeitragVerfasst am: 19.07.2007, 12:33    Titel: Antworten mit Zitat

Die Zahlen kommen aus dem ROM. Ein Prog legt sie dort ab. Ich will mit Gattern arbeiten. Ich will das Ergebniss garnicht sehen. Das will das Prog. Aber auch nur dann, wenn es eine Multiplikation/Division/Addition/Subtraktion machen will, mit zwei Zahlen. Ich habe mal an 16 Bit gedacht.

mfg

The real Agent D
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 19.07.2007, 13:16    Titel: Antworten mit Zitat

Alles klar, das macht also alles ein "Prog". Woher dieses Prog kommt, was es macht und worauf es läuft ist natürlich uninteressant...

Ein komplettes 16-Bit Rechenwerk aus Gattern aufzubauen ist ein ehrgeiziges Ziel, ich hoffe, Du hast Dir für diesen Sommer noch nichts anderes vorgenommen zwinkern

Oder Du hast eine Menge Geld übrig, dann könntest Du das mit den Ergebnistabellen im ROM machen. Zwei 16-Bit Eingabewerte bedeuten einen 32-Bit Adressbus, also 4GB Speicherplatz. Das mal Zwei, weil Du ja auch zwei Byte als Ausgabe haben möchtest und das für jede der vier Grundrechenarten. Beim Teilen müsste man sich noch über die Verwaltung eines eventuellen Restes Gedanken machen.

Wie wäre es mit einem einfachen 8-Bit Addierwerk und das "Prog" macht den Rest? Zumindest für den Anfang.
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 19.07.2007, 13:29    Titel: Antworten mit Zitat

@The real Agent D:

Code:
if(The real Agent D = KeineBeschaeftigungInDenNaechsten20Jahren) {
echo "Wenn du in den nächsten 20 Jahren keine andere Beschäftigung hast: Gut.";
} else {
echo "Kauf dir die C-Control Mini, und lass die die Arbeitmachen.";
}

_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The real Agent D



Anmeldungsdatum: 24.11.2005
Beiträge: 605
Wohnort: Hall i. T.

BeitragVerfasst am: 20.07.2007, 10:41    Titel: Antworten mit Zitat

Skilltronic hat Folgendes geschrieben:
Wie wäre es mit einem einfachen 8-Bit Addierwerk und das "Prog" macht den Rest? Zumindest für den Anfang.

Daran hab ich eh gedacht. Die Zahlen mit denen die CPU rechnen werden kann, sollen halt maximal 16 bit lang sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Bimi



Anmeldungsdatum: 03.12.2007
Beiträge: 66

BeitragVerfasst am: 03.12.2007, 20:15    Titel: Antworten mit Zitat

Skilltronic hat Folgendes geschrieben:
Hallo,

das ist auch nicht so einfach, weil Du Multiplikation und Division auf Addition und Subtraktion zurückführen musst. Bei Multiplikation ist das noch relativ einfach, da machst du aus 3*3 eben 3+3+3. Beim Teilen ist es etwas schwieriger. da musst Du den Divisor so lange vom Dividenden abziehen, bis es nicht mehr geht. Dabei kann natürlich noch ein Rest übrigbleiben, aber eine Fließkommaverwaltung aus Logikgattern nachzubauen dürfte kompliziert werden. Vielleicht schaust Du Dir mal an, wie das bei diesem Streichholzcomputer gemacht wird.

Gruß
Skilltronic


...würde man das so machen, würde ein 543543 * 854356 selbst auf einem P4 ewig dauern...

Eine Multiplikation wird vor allem durch Schiebebefehle ausgedrückt - wenn ich mich richtig erinnere sieht eine Multiplikation wie folgt aus:

Code:

FUNCTION mul (a AS INTEGER, b AS INTEGER) AS INTEGER
    DIM tmp AS INTEGER
    DIM newval AS INTEGER
    tmp = 1
    newval = a
   
    WHILE tmp < b SHR 1
        tmp = tmp SHL 1
        newval = newval SHL 1
    WEND
   
    b = b - tmp
    IF (b > 1) THEN
        RETURN newval + mul (a,b)
    ELSE
        IF (b = 1) THEN
            RETURN newval + a
        ELSE
            RETURN newval
        END IF
    END IF   
END FUNCTION
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bimi



Anmeldungsdatum: 03.12.2007
Beiträge: 66

BeitragVerfasst am: 03.12.2007, 20:25    Titel: Re: Division / Mutiplikation Antworten mit Zitat

The real Agent D hat Folgendes geschrieben:
Hi,

ich stehe momentan vor einem kleinen Problem. Ich will Schaltungen entwerfen, die es ermöglicht, zwei Zahlen mteinander zu dividieren/multiplizierne. Mein Problem: Ich kann kein Art Formel finden, mit der man eine Division/Multiplikation mit Bolschen Operatoren Ausdrückt. Ich habe in einem Buch über Elektronik so eine Formel für Aditionen und Subtraktionen gefunden, da steht allerdings nur drinnen, dass eine Division eine erweiterte Subtraktion ist und eine Multiplikation eine erweiterte Adition. Mehr steht da nicht. Ich bin auch bei Wikipedia und Konsorten nicht fündig geworden.
Kann mir vielleicht hier jemand weiter helfen?

mfg

The real Agent D


Wie man das Ganze mit Code ausdrücken kann, habe ich eben gepostet. Das Ganze als Hardwareschaltung wird etwas aufwändiger - du brauchst neben deinem Additionswerk Schieberegister und so etwas wie einen Stack.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 04.12.2007, 01:17    Titel: Antworten mit Zitat

ein stack für multiplikation? durchgeknallt
http://en.wikipedia.org/wiki/Multiplication_ALU
_________________
"It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Bimi



Anmeldungsdatum: 03.12.2007
Beiträge: 66

BeitragVerfasst am: 06.12.2007, 12:34    Titel: Antworten mit Zitat

MisterD hat Folgendes geschrieben:
ein stack für multiplikation? durchgeknallt
http://en.wikipedia.org/wiki/Multiplication_ALU


Wo legt du die partial products ab?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 06.12.2007, 13:05    Titel: Antworten mit Zitat

Hallo

Egal, ob Stack, Register oder Akkumulator. Jedenfalls bräuchte er ein "richtiges" Rechenwerk mit Speicher für Zwischenergebnisse, das von einem Takt gesteuert wird und verhältnismäßig komplexe Funktionen ausführt. Bei einer Additionsschaltung reicht es dagegen schon, die Summanden auf den Eingang zu geben und die Summe vom Ausgang abzunehmen. Es war schliesslich die Rede davon, das Ganze aus einzelnen Logikgattern aufzubauen und wie es aussieht, hat The real Agent D in den vergangenen fast fünf Monaten (!) nicht mal das mit der Addition in Angriff genommen. So lange war dieser Thread hier nämlich in der Versenkung verschwunden.

Gruß
Skilltronic
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Profi-Forum Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz