Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
The real Agent D
Anmeldungsdatum: 24.11.2005 Beiträge: 605 Wohnort: Hall i. T.
|
Verfasst am: 18.07.2007, 12:37 Titel: Division / Mutiplikation |
|
|
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 |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 18.07.2007, 13:00 Titel: |
|
|
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 |
|
|
Michael Frey
Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 18.07.2007, 13:57 Titel: |
|
|
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, 16:20, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 18.07.2007, 14:49 Titel: |
|
|
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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 18.07.2007, 20:57 Titel: |
|
|
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 |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 19.07.2007, 00:17 Titel: |
|
|
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 _________________ "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 |
|
|
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 19.07.2007, 10:54 Titel: |
|
|
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 |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 19.07.2007, 12:13 Titel: |
|
|
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 |
|
|
The real Agent D
Anmeldungsdatum: 24.11.2005 Beiträge: 605 Wohnort: Hall i. T.
|
Verfasst am: 19.07.2007, 12:26 Titel: |
|
|
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 |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 19.07.2007, 12:48 Titel: |
|
|
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 |
|
|
The real Agent D
Anmeldungsdatum: 24.11.2005 Beiträge: 605 Wohnort: Hall i. T.
|
Verfasst am: 19.07.2007, 13:33 Titel: |
|
|
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 |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 19.07.2007, 14:16 Titel: |
|
|
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
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 |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 19.07.2007, 14:29 Titel: |
|
|
@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 |
|
|
The real Agent D
Anmeldungsdatum: 24.11.2005 Beiträge: 605 Wohnort: Hall i. T.
|
Verfasst am: 20.07.2007, 11:41 Titel: |
|
|
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 |
|
|
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 03.12.2007, 21:15 Titel: |
|
|
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 |
|
|
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 03.12.2007, 21:25 Titel: Re: Division / Mutiplikation |
|
|
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 |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.12.2007, 02:17 Titel: |
|
|
ein stack für multiplikation?
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 |
|
|
Bimi
Anmeldungsdatum: 03.12.2007 Beiträge: 66
|
Verfasst am: 06.12.2007, 13:34 Titel: |
|
|
Wo legt du die partial products ab? |
|
Nach oben |
|
|
Skilltronic
Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 06.12.2007, 14:05 Titel: |
|
|
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 |
|
|
|