Abgesehen davon, daß ich die Sonderbehandlung der Null noch gemacht habe, wäre dann mein Beispiel genau so falsch. Ich hatte nur das VI von Stenz vereinfacht, und jetzt habe ich endgültig keine Lust mehr.
Es gib ja unter unter dem Siemens-Link auch ein PDF mit offiziellem C-Progrämmchen zur Konvertierung, wenn man das einfach nach LV portiert könnte theoretisch überhaupt nichts schief gehen.
Das Siemens-Format ist logisch klar und einfach, und da fragt man sich, warum das offizielle Gleitkommaformat nach IEE-574 zwar im Prinzip ähnlich, aber letzlich komplizierter ist. Der Hauptgrund ist: man hat es bei IEEE so getrickst, daß die Lexikalische Ordnung der Zahlen erhalten bleibt. D.h. wenn bei 2 (single) Gleitkommazahlen G G2>G1 ist, dann gilt das in gleicher Weise auch für die beiden U32-Zahlen, in denen das Format hineingepackt ist. Genial!
Dank Luckis Arbeit geht mein VI noch einfacher zu stricken:
<strike>[attachment=59593:Image01.png]</strike>
EDIT: Korrekter Upload:
http://www.labviewforum.de/index.php?s=&am...st&p=110562
Gruß, Jens
P.S.: @Lucki: Die Null muss zumindest bei der Wandlung nach DBL oder SGL nicht gesondert behandelt werden. Die Mantisse ist ja Null,
und 0 * 2^-128 ist immer noch Null.
Hallo Jens.
Die Ergebnisse deines VIs stimmen leider nicht, die Bitanzeige der Mantisse und des Exponent stimmen schon nicht.
Ich habe bei der Bitbezeichnung der Mantisse aus der 1 eine 0 gemacht. Danke :-).
Das VI von Lucki funktioniert einwandfrei.
Gruß Ralf
' schrieb:Hallo Jens.
Die Ergebnisse deines VIs stimmen leider nicht,
Natürlich stimmt mein VI. Und von welchem sprechen wir jetzt? Vom hochgeladenen VI oder vom Screenshot?
EDIT: <strike>Zumindest das hochgeladene VI stimmt. Der Screenshoot ist Tricky, das gebe ich zu. Scheint doch nicht ganz zu passen!</strike>
EDIT3: Hochgeladenes VI hat nicht gestimmt.:(Gelöscht.
' schrieb:die Bitanzeige der Mantisse und des Exponent stimmen schon nicht.
Auch die Bitanzeige stimmt, sowohl im hochgeladen VI als auch im gemachten Screenshot!
Im hochgeladenen VI ist jetzt das Array für den Exponenten bloß andersrum dargestellt, es fängt halt mit Bit 24 an, nicht mit dem Vorzeichen (Bit 31) wie bei dir.
Und im Screenshot gilt das auch für die Anzeige der Mantisse. Aufpassen, hier ist am Build-Array die Reihenfolge vertauscht!
' schrieb:Ich habe bei der Bitbezeichnung der Mantisse aus der 1 eine 0 gemacht. Danke :-).
Das VI von Lucki funktioniert einwandfrei.
Lucki hat selber zugegeben, dass es für negative Zahlen NICHT korrekt funktioniert.
Gruß, Jens
EDIT: Ups: Mea Culpa, im letzten Screenshot ist die Konstante, durch die geteilt wird, verkehrt:
[
attachment=30567]
EDIT 2: Nee, immer noch nicht ganz?!
Hallo Jens
Ich habe dein VI KG_NACH_SGL_V2 getestet und es klappt nicht.
DW 0 = 2379 DW 1 = 0 ergibt SGL 300
DW 0 = 2485 DW 1 = 0 ergibt SGL -300
und
DW 0 = 1903 DW 1 = 6554 ergibt SGL 111.1
DW 0 = 1936 DW 1 = -6554 ergibt SGL -111.1
Und so funktioniert es bei der Version von Lucki (V2) und von mir (V1).
Gruß
Ralf
Ich nehme alles zurück, was ich gesagt/geschrieben habe.
Ich habe das mit dem Vorzeichen-Bit für die Mantisse komplett falsch aus der Doku interpretiert. Das ist nicht ein Bit, das ein + oder - Vorzeichen anzeigt, sondern bei Bit 24=True wird abgezogen. Somit hat dein VI bei der Berechnung der Mantisse alles richtig gemacht. Trotzdem fehlt dir die Vorzeichenbehandlung beim Exponenten.
So, und jetzt noch ein Screenshot, der (hoffentlich) passt (zumindest bei den Bsps, die du veröffentlicht hast):
[
attachment=30569]
EDIT: Und noch eine korrigierte V2:
[
attachment=30570]
Gruß, Jens
EDIT2: @stenzr: Hast du mal ein Bsp für eine Zahl kleiner als 1 zur Hand? Dann ist der Exponent negativ!
Hallo Jens
Sieht gut aus, jetzt können wir beruhigt ins Wochenende gehen.
Schönen Dank für eure Geduld.
Gruß Ralf
DW 0 = -2232 DW 1 = -16714 ergibt SGL 0,00111
Ich hab in meiner Version im Array (Index 0) für den Exponent die 0 gegen ein -128 getauscht und jetzt gehen auch Zahlen kleiner 0
' schrieb:DW 0 = -2232 DW 1 = -16714 ergibt SGL 0,00111
Mein schöngeistiges Wesen sträubt sich gegen so eine Angabe, auch wenn alles richtig herauskommt.
Unter Byte, Word, Doppelword versteht man gemeiniglich vorzeichenlose Integer U8, U16, U32.
Es wäre also sauberer, die beiden Eingangs-Doppelworte als U16 zu deklarieren, und dann würde die obigen Angaben so lauten:
DW 0 = 63304 DW 1 = 48822 ergibt SGL 0,00111
Man kann negative Werte und negative Exponenten leicht selbst produzieren, indem man die Doppelworte U16 auf HEX-Anzeige umstellt:
Wenn im DW 0 in der ersten Stelle der Wert 8..F drin steht, ist der Exponent negativ, und wenn in der dritten Stelle 8..F drin steht, ist die Zahl negativ.
[
attachment=30565]
Du hast sicherlich recht, die S5 stellt mit mir dieses Format zur Verfügung und deshalb habe ich es auch verwendet
Ich hätte die Datenwörter natürlich in KH (Hexadezimal) angeben können.
Gruß Ralf