Forum

Einloggen | Registrieren | RSS  

feldmaus(R)

05.04.2009,
22:37
 

32bit binär nach 32bit float(Speziell) (Elektronik)

Hi Alle,

mein Problem ist, das ich eine binäre 32bit
Zahl habe, die ich zwar nach 32bit float
umrechnen kann, aber ein anderes Ergebnis bekomme,
als z.b. von dem Linux Programm <ghex>(Gnome).
Das Programm ist dabei nicht entscheidend, alle
Hexeditoren haben mir den gleichen 32bit float wert
angezeigt.

Der binär Wert ist:
00000000 00000000 10000000 10111111
Oder:
0000 0000 0000 0000 1000 0000 1011 1111
Oder:
0 00000000 00000001000000010111111

Das erste bit besagt das es eine positive
32bit float Zahl ist.

Die nächsten 8 bit sollen den Exponent ergeben.
Dazu rechnet man die 8bit in dezimal um, was 0 ist
und zieht davon 127 ab, dies ergibt -127.
Aslo würde die float Zahl normalerweise wie folgt
berechnet:
(1+2^-8+2^-16+2^-18+2^-19+2^-20+2^-21+2^-22+2^-23)*2^-127

Wie auch immer müsste dies laut dem Programm eine 32bit
float Zahl sein:
1,000000e+00
Wobei in dem Programm Little Endian aktiviert ist.
Ist standardmäßig aktiviert. Deaktiviere ich es
kommt eine andere 32bit float Zahl raus.

Wichtig ist mir zu wissen, nicht ob sein Ergebnis richtig
ist oder meins, sondern wie er darauf kommt. Sein
Ergebnis ist definitiv richtig, da ein fertiges octave
skript die gleichen 32bit float Zahlen ausgibt.
Dieses Skript wurden von Entwicklern geschrieben, deren
Software ich nutze...blablabla(unwichtig, außer Jemand
möchte es hören :-) )

Hier noch eine zweites beispiel.
Die 32bit binär Zahl,
00000000 00000000 00000000 11000000
soll die 32bit float Zahl,
-2,000000e+00
ergeben.

Oder die 32bit binär Zahl:
00000000 00000000 10010000 01000001
soll
+18
ergeben.

Hat da Jemand ne Idee wie der hex Editor und das octave
skript auf diese 32bit float kommen ?

In wikipedia steht noch was unter "Interpretation des
Zahlenformats":
http://de.wikipedia.org/wiki/IEEE_754
Dies habe ich aber leider nicht ganz verstanden.

Grüße Markus

hws(R)

E-Mail

59425 Unna,
05.04.2009,
23:35
(editiert von hws
am 05.04.2009 um 23:37)


@ feldmaus

32bit binär nach 32bit float(Speziell)

Gerade in Wiki nachgelesen, hab es darmals auch so gemacht. Auf einem alten HP Taschenrechner hatte ich nen Programm dazu, aber es auch mal "zu Fuss" nachvollzogen.

» Hier noch eine zweites beispiel.
» Die 32bit binär Zahl,
» 00000000 00000000 00000000 11000000
» soll die 32bit float Zahl,
» -2,000000e+00
» ergeben.

Könnte die Reihenfolge anders dargestellt werden?
Bei ganz hinten, hast du da zufällig ne Null dran vergessen?
1 10000000
Der Exponent hat 8 Stellen und nicht 7.
10000000b = 128d (minus 127 = 1d) also 2^1 = 2
Die andere "1" ist Vorzeichen und mit der unterdrückten "1" ist die Mantisse 1,000b (oder auch 1,00..d - ist in diesem Fall das gleiche :-D )
-(1,00.. * 2 exp 1) .... Ergibt -2

Kann es sein, dass du zwar Big/littel Endian beachtest hast, aber die Reihenfolge der Speicherzellen falsch hast?

Bei den anderen Zahlen kann ich erst in der Firma nachsehen, dort ist der HP-Rechner. (könnte ich zwar hier auch zu Fuss - mag ich aber nicht)

Das HP-Programm wird dich nicht interessieren - ist in der UPN Notation, also nen Taschenrechner mit "ENTER"Taste. (schade, dass es diese Bedienung nicht mehr gibt)

hws

hws(R)

E-Mail

59425 Unna,
06.04.2009,
11:04

@ feldmaus

32bit binär Fortsetzung ..

» Der binär Wert ist:
» 00000000 00000000 10000000 10111111
mal in hex hingeschrieben, dann kann man's leichter erfassen.
0 0 0 0 8 0 B F h
in der üblichen Reihenfolge (wie in Wikipedia beschrieben) und ausgerechnet:
BF 80 00 00 = -1

» Das erste bit besagt das es eine positive
» 32bit float Zahl ist.
Ja, nur hast du die Reihenfolge etwas durcheinander gebracht, wie schon in voriger Mail beschrieben.
High / Lowbyte ist in korrekter Reihenfolge, die Speicheradressen jedoch in falscher Reihenfolge.

» Wie auch immer müsste dies laut dem Programm eine 32bit
» float Zahl sein:
1,000000e+00

Minuszeichen übersehen ?

» Wobei in dem Programm Little Endian aktiviert ist.
» Ist standardmäßig aktiviert. Deaktiviere ich es
» kommt eine andere 32bit float Zahl raus.

Logisch, dann wär es FB 08 00 00h
Und das ist -7,61.. e35

» Wichtig ist mir zu wissen, nicht ob sein Ergebnis richtig
» ist oder meins, sondern wie er darauf kommt.

Genauso, wie in Wikipedia beschrieben.


» Hier noch eine zweites beispiel.
» Die 32bit binär Zahl,
» 00000000 00000000 00000000 11000000
» soll die 32bit float Zahl,
» -2,000000e+00
» ergeben.
Rechnen wir mal rückwärts: -2 = C0 00 00 00h

» Oder die 32bit binär Zahl:
» 00000000 00000000 10010000 01000001
0 0 0 0 9 0 4 1 h
» soll +18 ergeben.
Die 18 hab ich mal umgerechnet, da kam
41900000h
raus.

» In wikipedia steht noch was unter "Interpretation des
Zahlenformats":
» http://de.wikipedia.org/wiki/IEEE_754
» Dies habe ich aber leider nicht ganz verstanden.

Was denn nicht?
Schreib dochmal unter die schöne Zeichnung deinen Binärwert und rechne.
Bei (relativ kleinen) positiven ganzen Zahlen isses recht einfach.

hws

feldmaus(R)

06.04.2009,
11:39

@ hws

32bit binär nach 32bit float(Speziell)

» Gerade in Wiki nachgelesen, hab es darmals auch so gemacht. Auf einem alten
» HP Taschenrechner hatte ich nen Programm dazu, aber es auch mal "zu Fuss"
» nachvollzogen.
»
» » Hier noch eine zweites beispiel.
» » Die 32bit binär Zahl,
» » 00000000 00000000 00000000 11000000
» » soll die 32bit float Zahl,
» » -2,000000e+00
» » ergeben.
»
» Könnte die Reihenfolge anders dargestellt werden?
» Bei ganz hinten, hast du da zufällig ne Null dran vergessen?
» 1 10000000
» Der Exponent hat 8 Stellen und nicht 7.
» 10000000b = 128d (minus 127 = 1d) also 2^1 = 2
» Die andere "1" ist Vorzeichen und mit der unterdrückten "1" ist die
» Mantisse 1,000b (oder auch 1,00..d - ist in diesem Fall das gleiche :-D )
» -(1,00.. * 2 exp 1) .... Ergibt -2
»
» Kann es sein, dass du zwar Big/littel Endian beachtest hast, aber die
» Reihenfolge der Speicherzellen falsch hast?
Das will ich nicht ausschliessen. Ich glaube ich muss
doch ein wenig mehr erzählen.

Diese binären Zahlen wurden als 16bit Zahlen über den USB
Bus geschickt und auf dem PC zu 32bit Zahlen konvertiert.
Leider habe ich die dazu verwendeten konvertierungs
Software(C++) nicht verstanden. Die C++/C konvertierungs-
Schnittstelle sieht wie folgt aus,
http://nopaste.debianforum.de/20504

Bitte nur den Link anschauen wenn ihr keine Kopfschmerzen
von C++ bekommt. :-D
usrp_source ist die schnittstelle zu dem peripherie Gerät
welches usrp heißt und über die USB Schnittstelle am PC
hängt.

Die Datei mit den binären Zahlen ist hier,
http://rapidshare.de/files/46560928/usrp_output_64bit_complex_only_sin_signal.dat.html
oder hier,
http://rapidshare.de/files/46560938/usrp_output_64bit_complex_only_sin_signal.dat.html

Vielen Dank für die Antwort
und Grüße Markus

feldmaus(R)

06.04.2009,
12:23
(editiert von feldmaus
am 06.04.2009 um 12:24)


@ hws

32bit binär Fortsetzung ..

» Minuszeichen übersehen ?
Ich denke Du könntest recht haben. Ich schaue zu Hause
nochmal nach, da ich hier die binär Datei nicht habe, nur
eine andere, die ich schon hochgeladen habe.
»
» » Wobei in dem Programm Little Endian aktiviert ist.
» » Ist standardmäßig aktiviert. Deaktiviere ich es
» » kommt eine andere 32bit float Zahl raus.
»
» Logisch, dann wär es FB 08 00 00h
» Und das ist -7,61.. e35
Das ist also "little Endian" ?!
Byte für Byte rückwärts lesen ?
Und "big Endian" ist dann was ?
» » In wikipedia steht noch was unter "Interpretation des
» Zahlenformats":
» » http://de.wikipedia.org/wiki/IEEE_754
» » Dies habe ich aber leider nicht ganz verstanden.
»
» Was denn nicht?
Dort ist eine Tabelle aufgeführt mit den Spalten,
+Bedeutung
+Salopp
Langsam verstehe ich glaube ich. Der Wert der Float Zahl
berechnet sich in speziellen Fällen anders, aber was ist
mit <Salopp> gemeint ?
» Schreib dochmal unter die schöne Zeichnung deinen Binärwert und rechne.
Man das ist klasse, :pairsing:
ich sitze da schon seit einer Woche dran, aber das der PC
die bytes umgekehrt schreibt muss man erst wissen.
Ist das immer so ?

Grüße Markus

Hartwig

06.04.2009,
12:48

@ hws

32bit binär nach 32bit float(Speziell)

Hallo HWS,

leider - nein zum Glück! - hast Du ausnahmsweise mal nicht Recht. HP verkauft den HP35s noch (wieder?), und der ist umschaltbar auf UPN. Siehe http://h41111.www4.hp.com/calculators/de/de/scientific/.
Am PC habe ich übrigens CALC98 installiert, ein Desktop-Taschenrechner (Freeware) der ebenfalls UPN kann.

Ich habe - ich glaube so 1973 - als Student 1275,-- DM als "Sonderpreis für Studenten" in einen HP45 investiert. Sauer mit Tutorials verdientes Geld. Etwa 10 Jahre später ist mir der HP45 abhanden gekommen - wurde durch den HP11c ersetzt, den benutze ich immer noch....

Grüße
Hartwig

feldmaus(R)

06.04.2009,
13:14

@ Hartwig

32bit binär nach 32bit float(Speziell)

Also passt hier zwar nicht ganz rein, aber dann mache
ich auch mal Werbung. :-)
Den TI-89 finde ich auch ziemlich nett, dem kann man sogar
eigene Programme verpassen.

Grüße Markus

Harald Wilhelms(R)

E-Mail

06.04.2009,
13:38
(editiert von Harald Wilhelms
am 06.04.2009 um 13:39)


@ feldmaus

32bit binär nach 32bit float(Speziell)

» Also passt hier zwar nicht ganz rein, aber dann mache
» ich auch mal Werbung. :-)
» Den TI-89 finde ich auch ziemlich nett, dem kann man sogar
» eigene Programme verpassen.
»
» Grüße Markus

Son "modernen Kroam" gabs zur Zeit des HP35
noch nicht. ;-)
An der FH hatten wir damals ene "Wang" mit
ähnlichen Befehlsumfang aber etwa so gross
wie eine grössere Schreibmaschine.
Gruss
Harald