mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Gleitkommazahl mit C20 multiplizieren?


Autor: Mister_X Y. (c2000)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach' Deine Hausaufgaben gefälligst selbst.

Autor: Mister_X Y. (c2000)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Grrrr (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mister_X Y. (c2000)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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
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:
uint32_t hexfloatb = 0xc200000;
float b;
b = *(float*)&hexfloatb;


Peter

Autor: Stefan Salewski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mister_X Y. (c2000)
Datum:

Bewertung
0 lesenswert
nicht 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????

Autor: Wegstaben Verbuchsler (wegstabenverbuchsler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mister_X Y. (c2000)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh ok, dann muss ich mir das wohl irgendwie beibringen :)

Danke für die Meinungen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.