Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: IEEE Double Float converter Kategorie: Programmierung (von André H. - 3.09.2012 14:01)
Als Antwort auf IEEE Double Float converter von Newbie - 3.09.2012 11:35
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
Hallo Mike,

benutze bitte zum Posten von Quellcode die Code-Tags.

> if(value&0x80000000 == 0)      //Wird übersprungen - wieso????
> sign = 1;

Dies wird definitiv nicht übersprungen .

 
> if(value&0x80000000 == 0)  gibt offenbar nicht 0
>
> Beispielsweise 0x41c90000 sollte 25.125 ergeben - aber das Vorzeichen stimmt nicht.
 
Naja, es wird genau ausgeführt, was Du geschrieben hast.
Nur ist es eben so, daÃ? es eine Rangfolge der Operatoren gibt. (Siehe auch Handbuch)
Punkt vor Strich ist ja bekannt. Genauso haben auch Vergleiche (gleich, kleiner, grö�er etc.)
Vorrang vor verknüpfenden Operatoren (und, oder, xor etc.)
Demnach ist Deine If-Bedingung immer false, da zuerst 0x80000000 mit 0 verglichen wird,
und anschlie�end das Erbenis mit value "und"-verknüpft wird.
Da Du aber das höchste Bit ausmaskieren willst, mu� Du hier zwingend Klammern setzen.
Ã?brigens muÃ?t Du in C2 keine Klammer um die ganze Bedingung setzen.

if (value&0x80000000) == 0 sign=1; else sign=-1;


Wenn Du ein biÃ?chen Rechenzeit sparen willst, kannst Du die Berechnung
auch als Einzeiler schreiben:

 test=(cast.longFloat(value&0x7FFFFF + 0x800000) / 0x800000) * math.pow(2,((value&0x7F800000)>>23) - 127);
 if value<0 test=-test;


Oder als Funktion:

function bigendianToFloat(long value) returns float
{float x;
 x=(cast.longFloat(value&0x7FFFFF + 0x800000) / 0x800000) * math.pow(2,((value&0x7F800000)>>23) - 127);
 if value<0 return -x; else return x;
}


MfG André H.




Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: IEEE Double Float converter (von Newbie - 3.09.2012 15:39)