unsigned long zu float
-
Hallo
ich möchte ein unsigned long zu float casten aber! auf softwareebne,
also nicht mit *(float *)&val. dabei gehe ich von einem 32bit single aus.
das zielsystem unterschützt keine bitarithmetik, wohl aber operationen
wie runden und exponenziern.einige nachforschungen haben ergeben, dass das vorzeichen an der ersten stelle
steht, danach 8 bits der exponent und dann 23 bits das [dings_da_vorne]
die basis scheint 127 zu sein.allerdings scheint es da besonderheiten zu geben.
zusätzlich brauche ich den schritt in die andere richtung, also von float
zu unsigned long.eine formel wäre nett
z.b. 32tes bit * 127 ^ (31tes_bit_bis_23tes_bit) * (23tes_bit_bis_rest)
-
Die Darstellung von float und unsigned long hängt vom System ab und ist nicht im ANSI Standard spezifiziert. Die meisten Architekturen halten sich aber (mehr oder weniger) an den IEEE 754 Standard. Da solltest du also mal einen Blick reinwerfen, wie du deine floats darstellen musst.
-
Die Frage ist, warum Du das willst, denn eigentlich sollte der Compiler das für Dich tun, dazu sind die Dinger ja da.
Aber wenn Du partout selbst ran willst und das FP- Format nicht dokumentiert ist, guck' doch zu, wie er das Zeug konvertiert.
Sprich: Debugger anschmeißen und Disassemblieren. Ist zwar mühselig, aber geht.
-
Ist zwar mühselig, aber geht.
nope
es handelt sich um die grafikkarte. ich möchte im pixelshader eine FLOAT zu DWORD
konvertierung vornehmen. durch eine spezielle technick bekomme ich ein float,
das den farbwert darstellt. dieser wurde aber vom anwendungsprogramm als RGBA
verwendet. jetzt möchte ich den float zerlegen (in die bit darstellung) um an
den DWORD zu kommen.mittlerweile hab ichs aber gelöst. (touint)