Rechnen mit Floats
-
Hi!
Floats werden ja in Vorzeichembit, Mantisse und Exponent gegliedert. Jetzt wollte ich fragen, wie man mit ihnen Rechnen muss.Ich bräucht die Grundrechenarten +, -, *, / sowie Potenzieren und Modulo also Rest bei Division. Das ganze soll dann später eine FPU auf einen 8 Bitter Microntroller emulieren. Dabei ist die Anzahl an Bits für Mantisse und Exponent konstant.
mfg olli
-
das ist vermutlich eher was für das assembler forum.
prinzipiell solltest du zunächst entsprechende funktionen für integer erstellen (8bit cpus haben ja häufig kein mul/div), die anpassung an floats ist dann vergleichsweise einfach.
-
Fließkommadarstellung (Gleitpunkt-) nach IEEE 754
Aufbau einer float-Binärdarstellung
Bit 31: Vorzeichen
Bit 23 - 30: Exponent
Bit 0 - 22: Mantisseund naja dann halt binär rechnen ... ???
aber wenn ich ehrlich bin verstehe ich auch die frage nicht so ganz ??? das was da oben steht weißt du ja sicher schon ^^
-
PS:
eventuell hilft dir das
http://www.mpdvc.de/artikel/FloatingPoint.htm
das ist zwar mit C/C++ ... aber ich denke das rechnen wird zuminderst erklärt ...
-
camper: doch, div und mul sind vorhanden.
benutzer2: aufgrund dessen, das die Zahl in Mantisse und Exponent zerlegt ist das Rechnen mit Floats nicht das selber wie mit Integers. Naja gut, für Addition denke ich mal, müsste man halt die 2 Mantisse zusammenaddieren, und dann prüfen, welcher Exponent größer ist, und diesen dann verwenden, aber es gibt ja noch Potenzieren z. B. 2,560,123 wie man das eine Machine berechnet weiss ich nicht, in Mathe hat man zwar mal gelernt, wie man das Nährungsweise berechnet, aber die FPU wird das sicherlich effizienter lösen.
mfg olli
-
ich geh mal davon aus, das einfache shift operationen existieren
bei allen operationen muss das ergebnis hinterher wenn nötig, renormiert werden.
addition: bei ungleichem vorzeichen werden die mantissen subtrahiert, bei gleichem vorzeichen addiert. die mantisse der zahl mit dem kleineren exponenten wird um die differenz der exponenten nach rechts verschoben, dann werden beide mantissen addiert. der exponent des ergebnisses ist der des grösseren summanden (+1 bei überlauf).
subtraktion: wird zur addition bei ungleichem vorzeichen. sonst wie addition, falls es zum überlauf kommt, wechselt das vorzeichen es ergebnisses. ausserdem muss dann die mantisse des ergebnisses (als folge einer integeroperation im 2erkomplement) selbst negiert werden, da mantissen vorzeichenlos sind.
multiplikation: mantissen werden multipliziert, exponenten addiert (+1 bei überlauf), vorzeichen XORed. wichtig ist, dass der exponent 'biased' dargestellt ist, d.h. eine konstante wird addiert um ihn immer positiv zu machen. (beispiel float: exponent -126 entspricht 1 in binär darstellung, es wird also konstant 127 addiert,
das darf nat. nicht zweimal im ergebnis gemacht werden. - der summand ist stehts 2^(anz_bits_im_exponenten-1)-1 , so dass das reziproke jedes normierten wertes gebildet werden kann)division: analog multiplikation, exponenten werden subtrahiert.
potenzieren: die exponenten werden multipliziert. die mantisse wird wohl über die binomische reihe reihe ermittelt werden müssen.
renormieren: normierte zahlen beginnen haben an der ersten stelle stehts eine 1 stehen - bei subtraktion und division kann es zu denormierten zahlen kommen. dann ist der exponent schrittweise um 1 zu erniedrigen und die mantisse wird um 1 nach linksverschoben, bis die zahl normiert ist (oder der kleinste darstellbare exponent erreicht ist, das lässt man dann so stehen (underflow) ).
die führende 1 der mantisse wird nicht gespeichert.
-
Ich danke dir vielmals! Wird sicher schwer werden das ganze umzusetzen, zumal ich "nur" mit 8 Bit Registern rechnen kann, aber das wird schon
Hmm ja Potenzieren, event. lässt sich das ganze durch ab = exp(b * ln a) ausrechnen, http://www-math.uni-paderborn.de/agpb/ss03/mathinfo4/sqmul.pdf ist auch beschrieben wie es mit pos. ganzzahligen exponenten schnell geht.Weisst du, wie das Sachgebiet in der Mathematik heißt?
mfg olli
-
hi
bei uns ist es ein teil der numerik
-
Gehört auf jeden Fall zur Numerik! Immer wenn's ungenau wird... dann isses Numerik. Also ungenau im Sinne von: man kann Nachkommastellen verlieren etc.