double na unsigned int

Ahoj, muzute mi poradit nejakou funkci na prevod z floatu na unsigned int? diky

:arrow_right: administrator: přesunuto z "Ostatní"

Kolik jasnovidců sem asi tak chodí, co myslíš…? Nemůžeme.

Napiš v čem to potřebuješ - jaký prog. jazyk a jaký procesor.

omlouvam se, potreboval jsem prevest 0 az 1 na 0x0000 az 0xFFFF a vyresil jsem to nasledovne

output_data = (unsigned int) ((pom + 1) * 32767.5);

To by ma zaujimal vypis tohoto z asembleru

On ten převod v assembleru není až takový složitý. Float je uložený ve formátu 23 bitů mantisa + 8 bitů exponent + 1 bit znaménko. Mantisa je jakoby číslo 1.0 až 1.99999 s odstraněným nejvyšším bitem (tedy bez té jedničky). Exponent je mocnina 2 (+ offset 127). Takže pro převod na celé číslo stačí vzít 23 bitů mantisy jako celé číslo, přidat “1” jako 24. bit (pak to bude jakoby mantisa * 2^23) a jen vyrotovat doprava o příslušný počet bitů podle hodnoty exponentu (tedy o zhruba 23-(exp-127)).