Dobrý den,
snažím se napsat kód pro převod 32 bitového int čísla na float. Jediné co jsem byl schopen vypotit je tohle, ale je tam nekde chyba.
#include <stdio.h>
float itof (int i)
{
float flt = 0.0;
_asm
{
mov eax, i
bt eax, 31
jnc plus
rcr [flt], 1
neg eax
plus:
mov edx, 0x7F // Bias
bsr ebx, eax
mov ecx, 23
cmp ebx, ecx
jbe fit
// too big:
sub bl, cl
mov cl, bl
shr eax, cl
setc cl // to round or not to round
add eax, ecx
add edx, ebx
mov cl, 23
fit:
bsr ebx, eax
btr eax, ebx
sub cl, bl
shl eax, cl
or [flt], eax
add ebx, edx
shl ebx, 23
or [flt], ebx
}
return flt;
}
int main ( void )
{
float flt;
int i;
i = 12345678;
// i = -0x8888888; // different results, both are right
flt = (float)i;
printf("%i %f\n",i,flt);
flt = itof (i);
printf("%i %f\n",i,flt);
return 0;
}
Nevíte někdo co je tam špatně?
Předem děkuji za všechny reakce.