Kommerstellen-Rechner designen?


16.08.2022, 13:49

Damit ich das dann in Verilog umsetzen kann.

sugercat2005  16.08.2022, 13:35

Was hat ein CPU mit Kommazahlen rechnen zu tuen und mit Design ?
Möchtest du eine App Designen die Brüche in Kommazahlen umrechnet ?

theCPP 
Beitragsersteller
 16.08.2022, 13:45

Ich möchte in mein CPU eine Schaltung einbauen die mit Kommerzahlen Rechnungen spezialisiert ist.

gfntom  17.08.2022, 14:17

Was sind denn KommER-Zahlen?
Unter KommA-Zahlen kann ich mir noch etwas vorstellen.

theCPP 
Beitragsersteller
 17.08.2022, 15:35

zB. 427.4153

4 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Floating point in hardware darzustellen ist recht aufwändig. Ich würde stattdessen an Alternativen denken. Z.B. fixed point, also integers, bei denen ein gedachter Dezimalpunkt irgendwo gesetzt wird - damit reduziert sich der Aufwand darauf, lediglich zusätzlich bestimmen zu müssen, wo der Dezimalpunkt im Ergebnis sein muss, und das Rechnen selbst erfolgt mit Integer Math. Also Quasi float mit nichtveränderlicher Mantisse. Das erspart dir den Prozess des Normalisierens der Operanden, da diese schon normalisiert sind.

Eine weitere Alternative ist, mit Fraktionen zu rechnen, Gleitkommazahlen also stattdessen als Zähler/Nenner darzustellen, also als Brüche. Dadurch dass Zähler und Nenner Brüche sind, werden die dann ebenfalls als Integers dargestellt, und bleiben mit Integer Math berechenbar.


Bushmills145  17.08.2022, 15:07

Schau alternativ mal nach in z.B. auf github publizierte sources rein, z.B. https://github.com/dawsonjon/fpu

0
theCPP 
Beitragsersteller
 17.08.2022, 17:34
@Bushmills145

Ähm wie berechnet man wo die Kommerstelle sein soll?

0
Bushmills145  17.08.2022, 17:57
@theCPP

Beim Addieren bleibt sie erhalten, beim Multiplizieren zweier Operanden verdoppeln sich die Anzahl Nachkommastellen, und um soviele sollte dann vom Resultat mittels Schieben wieder entfernt werden.

1
theCPP 
Beitragsersteller
 18.08.2022, 07:04
@Bushmills145

Ähm wie berechnet man die Nachkommerstellen bei Dividieren?

0
Bushmills145  18.08.2022, 10:17
@theCPP

Da bietet sich an, die nicht zu berechnen, sondern wiederholt Divisionsschritte auszuführen, bis die gewünschte Anzahl Stellen erreicht ist. Solch ein einzelner Divisionschritt kann auch als Instruktion der CPU zugänglich gemacht werden, und die Anzahl benötigter oder gewünschter Teilungsschritte auch in Software bestimmt werden.

CPUs, die solche Teilungsschritte als Instruktion kennen, benutzen für den Divident gerne ein extra dafür bereitgestelltes Register.

0

Ich meine, Verilog ist für die hiesige "Gemeinde" wohl doch etwas zu speziell. (damit schließe ich mich ä, trotz meiner fast 37 Jahre Erfahrung in Sachen Hard- und Softwareware ein)

Die Wahrscheinlichkeit in GF einen versierten Fachmann*in zu finden halte ich für sehr gering

In Deiner Sache solltest Du Dich gezielter umschauen.

Ich habe mir mal die Entwicklung Deiner Fragen angesehen...

Ihrgend suggeriert Dein Frageverlauf, dass Du einer Art Lern-/Wissens-Bullemie erlegen bist.

Nichts einzuwenden, wenn jemand versucht mit der Hardware zu arbeiten... aber einen moderne Prozessor dürfte weit jenseits Deiner Möglichkeiten mit einem halben Jahr Erfahrung liegen...(bezogen auf den Inhalt Deiner alten Fragen)

Was Du jetzt mit Verilog anfangen willst, erschließt sich mir schon garnicht...

Dir fehlen komplett die Hintergründe...

Für für "Kommarechnen" solltest du Dich mit den internationalen Standards dazu beschäftigen... https://de.m.wikipedia.org/wiki/IEEE_754

1.2x4.6=5.52 bitte sehr. War doch easy?


theCPP 
Beitragsersteller
 16.08.2022, 13:34

Danke, wie setzt man das als Technises Design um?

0
FaTech  16.08.2022, 13:38
@theCPP

In wiefern? Als C++ Code, sowie dein Name CPP ist?

float result = 1.2f * 4.6f;
0
theCPP 
Beitragsersteller
 16.08.2022, 13:43
@FaTech

ich meine in Verilog

0
FaTech  16.08.2022, 13:46
@theCPP

Das hättest du erwähnen müssen, das weiß ich nicht

0