Optimalizacia konstantneho float vyrazu, was: C xc8

Jan Waclawek konfera na efton.sk
Středa Prosinec 6 10:15:24 CET 2017


C99 v 6.6. stanovuje nejake minimum operacii, ktore musia byt vyhodnotene
ako konstantny vyraz pri preklade. Prekladac vsak ma volnost najst aj ine,
zlozitejsie vztahy, ktore sa daju takto vyhodnotit, a to moze pokojne byt
zavisle na stupni optimalizacie.

Vypocty pri preklade pritom nemusia byt robene presne tak isto ako pri behu
programu, C99 predpisuje len to, ze musia mat minimalne taku istu
presnost, ale mozu byt aj presnejsie, co vzhladom na to co ten float
vlastne je moze pokojne znamenat aj iny vysledok.

Kedze nevieme, co je dwSampleRate, ani o aky prekladac islo a pre aky
target, tazko je sa vyjadrit ku konkretnym cislam. V skutocnosti, aj keby
si to vsetko prezradil, by to asi bolo tazke... ;-)

wek


----- Original Message ---------------
>Trochu od temy (nie je to xc8), som vcera riesil
>
>float fSymP;
>fSymP = (float)dwSampleRate / 2375.0f;
>m_wRDSDecBy = (WORD)((fSymP / fSamPerSym));
>
>pre dwSampleRate 228000 a fSamPerSym = 8
>vyslo bez optimalizacie wRDSDecBy = 12 (spravne), po zapnuti
>optimalizacie wRDSDecBy = 11 (zle)
>
>Pri zapnutej optimalizacii bolo v fSymP = 95.9999998
>pri vypnutej 96.0000000. Neviem preco. Vyriesilo to +0.5f
>Chyba je pravdepodobne v druhom riadku.
>
>j.



Další informace o konferenci Hw-list