Forum: Mikrocontroller und Digitale Elektronik Gleitkommazahl mit C20 multiplizieren?


von Mister_X Y. (c2000)


Lesenswert?

Hi,
ich habe eine Zahl, Bsp. -5.375
Die wandle ich in das IEEE32 Format um, also Ergebnis:
11000000101011000000000000000000
jetzt soll ich das ganze mit C200 000 multiplizieren.

Ich nehme an das ich die 11000000... in Hex umwandeln muss und dann mit 
C200000 multipliziere?

bei der Zahl C200 000 steht leider kein Zahlenformat dabei.

von Grrrr (Gast)


Lesenswert?

Mach' Deine Hausaufgaben gefälligst selbst.

von Mister_X Y. (c2000)


Lesenswert?

Grrrr schrieb:
> Mach' Deine Hausaufgaben gefälligst selbst.

Ich hab hier nicht gesagt das mir das ganze jemand berechnen soll!

Meine Frage war nur ob meine Annahme so stimmt, mehr nicht.

von Klaus W. (mfgkw)


Lesenswert?

Naja, das ist schwer zu sagen.

Zuerst ist C200 000 (oder nicht doch C200 0000?) vermutlich eine
Hexadezimalzahl, also z.B. 0xC2000000 und damit nur eine
andere Darstellung eines binären Musters.
Das wäre nebenbei nicht 11000000..., sondern
0b11000010 00000000 00000000 00000000.

Jedwedem Bitmuster, also auch deinem
0b11000010 00000000 00000000 00000000, kann man nicht zuverlässig
ansehen, in welchem Format es etwas darstellen soll.
Es könnte eine int sein, dann müsste man diese int in eine
float nach IEEE754 wandeln und dann multiplizieren.
Genausogut kann es bereits eine float sein.
Das kann nur aus der Fragestellung hervorgehen, oder man muß raten.

von Grrrr (Gast)


Lesenswert?

Deine Frage klingt wie die von einem KFZ-Lehrling, der, vor die Aufgabe 
gestellt einen Vergaser zu wechseln, als erstes fragt ob er einen 
Kreuzschlitzschraubenzieher nehmen soll oder einen 12er Schlüssel. 
Beides ist je nach Kontext richtig, d.h. die Frage ist (als erste 
überhaupt gestellt) mehr oder weniger sinnlos.

Auf Dein Problem bezogen, kann die Umwandlung in Hex, je nach dem 
welchen Weg Du gehst richtig sein oder nicht. Ohne zu wissen, wie Du 
vorgehst ist das nicht zu beantworten.

Deine Mitschriften sollten Dir entweder einen Weg zeigen, oder Du 
solltest, falls es sich um eine Übertragungsaufgabe handelt, erklären 
können auf welches Problem Du stösst, wenn Du dem gelernten Weg folgst 
und warum möglicherweise die Umwandlung in Hex eine Lösung sein könnte 
und warum Du Dir unsicher bist ob das geht.

Angesichts dessen aber, was Du alles NICHT schreibst, kann man Dich 
entweder nur ignorieren oder so antworten wie ich oder es Dir vormachen.

Und dann solltest Du mal klären welche Basis nun Dein Faktor "C20" oder 
"C2000" oder "C200000" hat.

Dann noch viel Erfolg.

von Mister_X Y. (c2000)


Lesenswert?

Sorry, aber ich kann euch leider nicht mehr geben weil das die 
Beschreibung der Aufgabe ist. Mal angenommen es ist so, das ich die 
IEEE32 * C20.... berechnen muss.
Kann ich das schriftlich machen?
Ich hab noch nie so ne große Hex-Zahl Schriftlich multipliziert, ich geb 
zu ich hab überhaupt noch nie eine HEx-Zahl multipliziert weil ich es 
noch nicht gebraucht habe, deshalb die Frage ob man es Schriftlich 
überhaupt hinbekommt in natürlich nicht allzu langer Zeit ( in der 
Prüfung muss es ja dann auch gehn).

von Peter D. (peda)


Lesenswert?

Michael X. schrieb:
> Hi,
> ich habe eine Zahl, Bsp. -5.375
> Die wandle ich in das IEEE32 Format um, also Ergebnis:
> 11000000101011000000000000000000

Warum umwandeln?

Du schreibst die Zahl so hin, wie sie ist und den Rest macht der 
Compiler
1
float a = -5.375;


> jetzt soll ich das ganze mit C200 000 multiplizieren.

Dazu mußt Du wissen, das das bedeuten soll.
In C ist das jedenfalls kein gültiger Ausdruck.
Ist es hex, dann muß es 0xc200000 heißen.
Ist es ein float als hex, dann mußt Du es casten:
1
uint32_t hexfloatb = 0xc200000;
2
float b;
3
b = *(float*)&hexfloatb;


Peter

von Stefan Salewski (Gast)


Lesenswert?

@Peter Dannegger

Ich hätte eher gedacht, dass es ihm um das Zahlenformat

http://en.wikipedia.org/wiki/IEEE_754-2008

und die möglichen Operationen damit (von Hand) geht, weniger um C 
Programmierung.

von Mister_X Y. (c2000)


Lesenswert?

Hehe, um ein C programm geht es mir nicht :)

Vergesst mal kurz meine restlichen Posts.



Ich will nur wissen ob es machbar ist in einer gewissen Zeit sagen wir 
3-4-5min eine so große Hexzahl zu multiplizieren (hab es selber noch 
nicht gemacht, kann es daher nicht einschätzen):

Das mal als Beispiel:
C0A00BEE * C2000000 =

kann ich das "per Hand" also schriftlich auf dem Blatt ausrechnen????

von Wegstaben V. (wegstabenverbuchsler)


Lesenswert?

> sagen wir 3-4-5min eine so große Hexzahl zu multiplizieren
> C0A00BEE * C2000000
> kann ich das "per Hand" also schriftlich auf dem Blatt ausrechnen????

Wenn du in der Lage bist, Dezimalzahllen  zu multiplizieren, z.B.

93475434 * 34971234

warum solle dir das nicht auch mit Hexadezimalzahlen gelingen?


Beispiel Multiplikation einer Ziffer dezimal: 4 * 4 = 16 = 6 an letzter 
Stelle plus Übertrag 1 auf vorletzter Stelle



geh halt beim hex-Rechnen über den dezimalen Umweg:
hexadezimal:  0x7 * 0xA = 0d7 * 0d10 = 0d70 = 0x46 = 6 an letzter Stelle 
plus 4 Übertrag auf vorletzter Stelle

ist halt ein bischen mehr Kopfrechen-Übung. Ein sauberes untereinander 
schreiben der einzelnen Ziffern ist sowohlö bei dezimaler wie bei 
hexadezimaler Basis eh vVoraussetzung.

von Mister_X Y. (c2000)


Lesenswert?

Mh ok, dann muss ich mir das wohl irgendwie beibringen :)

Danke für die Meinungen.

von Peter D. (peda)


Lesenswert?

Wegstaben Verbuchsler schrieb:
> warum solle dir das nicht auch mit Hexadezimalzahlen gelingen?


Hex nützt bloß nix, es geht ja um Float!

Also erstmal aufteilen in Mantisse, Exponent, Vorzeichen, dann Rechnen, 
Normieren und wieder zusammen basteln.


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.